⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simple_agent.c

📁 SRI international 发布的OAA框架软件
💻 C
字号:
#include <libicl.h>
#include <liboaa.h>
#include <stdio.h>

void test_solve(){
  ICLTerm* local_goal = icl_NewTermFromString("weather(X)");
  ICLTerm* local_params = icl_NewTermFromString("[]");
  ICLTerm* local_solutions = NULL;
  char* result_as_string = NULL;

  oaa_Solve(local_goal, local_params, NULL, &local_solutions);

  result_as_string = icl_NewStringFromTerm(local_solutions);
  printf("Solutions : %s\n ", result_as_string);

  free(result_as_string);
  icl_Free(local_solutions);
  icl_Free(local_params);
  icl_Free(local_goal);
}

int myOaaInterpret_Callback(ICLTerm* goal, ICLTerm* params, ICLTerm* solutions) {
  return oaa_Interpret(goal, params, &solutions);
}

int myDoEvent_Callback(ICLTerm* goal, ICLTerm* params, ICLTerm* solutions) {
  printf("In do event goal : %s params : %s solutions : %s \n",
	 icl_NewStringFromTerm(goal),
	 icl_NewStringFromTerm(params),
	 icl_NewStringFromTerm(solutions));

  if ( STREQ(icl_Str(goal), "a") ) {
    icl_AddToList(solutions, icl_NewTermFromString("a(2)"), TRUE);
    icl_AddToList(solutions, icl_NewTermFromString("a(3)"), TRUE);
  }else
  if ( STREQ(icl_Str(goal), "test_agent") ) {
    ICLTerm* first_param = icl_NthTerm(params, 1);
    if (icl_Str(first_param), "solve") {
      test_solve();
      icl_AddToList(solutions, icl_NewTermFromString("test_agent(solve)"), 
		    TRUE);
    }
  }

  return FALSE;
}

int myTestSolve_Callback(ICLTerm* goal, ICLTerm* params, ICLTerm* solutions) {
  printf("In test_1 goal : %s params : %s solutions : %s \n",
	 icl_NewStringFromTerm(goal),
	 icl_NewStringFromTerm(params),
	 icl_NewStringFromTerm(solutions));

  icl_AddToList(solutions, icl_NewTermFromString("test_call(test_1,ok)"), 
		TRUE);
  return FALSE;
}

int setup_oaa_connection(int argc, char *argv[]) {
  ICLTerm* mySolvablesAsTerm = icl_NewList(NULL);
  icl_AddToList(mySolvablesAsTerm, icl_NewTermFromString("a(X)"), TRUE);
  icl_AddToList(mySolvablesAsTerm, icl_NewTermFromString("test_agent(Y)"), TRUE);
  icl_AddToList(mySolvablesAsTerm, 
    icl_NewTermFromString("solvable(oaa_interpret(test_agent_c,Command),[callback(interpret)])"), TRUE);
  icl_AddToList(mySolvablesAsTerm, 
    icl_NewTermFromString("solvable(test_call(test1,X),[callback(test1)])"),
    TRUE);
  icl_AddToList(mySolvablesAsTerm, 
    icl_NewTermFromString("solvable(d(X),[type(data)], [write(true)])"),
    TRUE);

  if (com_Connect("parent", ICL_VAR)<0) {
    printf("Could not connect\n");
    return FALSE;
  }
    
  if (!oaa_Register("parent", "simple_agent_c", mySolvablesAsTerm)) {
    printf("Could not register\n");
    return FALSE;
  }

  if (!oaa_RegisterCallback("app_do_event", myDoEvent_Callback)) {
    printf("Could not register app_do_event callback\n");
    return FALSE;
  }

	/*
  if (!oaa_RegisterCallback("test1", myTestSolve_Callback)) {
    printf("Could not register test_1 callback\n");
    return FALSE;
  }
  */

	/*
  if (!oaa_RegisterCallback("interpret", myOaaInterpret_Callback)) {
    printf("Could not register myOaaInterpret_Callback callback\n");
    return FALSE;
  }
  */

  icl_Free(mySolvablesAsTerm);

  oaa_MainLoop(TRUE);
}


int main(int argc, char *argv[])
{
  oaa_Init(argc, argv);
  setup_oaa_connection(argc, argv);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -