simple_agent.c

来自「SRI international 发布的OAA框架软件」· C语言 代码 · 共 114 行

C
114
字号
#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 (icl_Str(goal), "a") {
    icl_AddToList(solutions, icl_NewTermFromString("a(2)"), TRUE);
    icl_AddToList(solutions, icl_NewTermFromString("a(3)"), TRUE);
  }else
  if (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 + =
减小字号Ctrl + -
显示快捷键?