例として、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);