例として、birthday(8, 21). という事実を Prolog に assert してみる。
const char* func = "birthday"; unsigned long func_name = SP_atom_from_string(func);
配列である必要は無いが、その方が便利かと。それぞれ SP_new_term_ref() で新しい term への参照を作っておいて、SP_put_integer() で int を term に入れることができる。SP_term_ref arg[2]; arg[0] = SP_new_term_ref(); arg[1] = SP_new_term_ref(); SP_put_integer(arg[0], 8); SP_put_integer(arg[1], 21);
新しく作る事実に対しても SP_term_ref を作って、SP_new_term_ref() で初期化しておく必要がある。 関数 SP_cons_functor() の宣言は、SP_term_ref new_fact = SP_new_term_ref(); SP_cons_functor(new_fact, func_name, 2, arg[0], arg[1]);
int SP_cons_functor(SP_term_ref t, /*新しく作る節*/
unsigned long name, /*functorの名前を変換したもの*/
int arity, /*arity(引数の数)*/
SP_term_ref arg, ...) /*引数(可変長)*/
である。これでやっと事実を作り上げることができた。
SP_pred_ref pAssert = SP_predicate("assert", 1, "");
goal = SP_query(pAssert, new_fact);