无法从C ++

时间:2016-04-14 04:15:24

标签: c++ c++builder ffi swi-prolog

我试图从C ++访问prolog文件的所有相关谓词。 我有prolog文件,

“new_gryffindor.pl”

sits_right_of(parvati,lavender).
sits_right_of(lavender,neville).
sits_right_of(neville,alicia).
sits_right_of(alicia,fred).
sits_right_of(fred,george).
sits_right_of(george,lee).
sits_right_of(lee,dennis).
sits_right_of(dennis,dean).
sits_right_of(dean,ginny).
sits_right_of(ginny,angelina).
sits_right_of(angelina,seamus).
sits_right_of(seamus,colin).
sits_right_of(colin,harry).
sits_right_of(harry,hermoine).
sits_right_of(hermoine,ron).
sits_right_of(ron,natalie).
sits_right_of(natalie,katie).
sits_right_of(katie,parvati).

sits_left_of(X,Y) :- sits_right_of(Y,X).

are_neighbours_of(X,Y,Z) :- sits_left_of(X,Z),
                            sits_right_of(Y,Z).

next_to_each_other(X,Y) :- sits_left_of(X,Y);
                           sits_right_of(X,Y).

我已经将C ++和Prolog文件与C ++代码集成在一起,

term_t a = PL_new_term_ref();
term_t b = PL_new_term_ref();
term_t ans = PL_new_term_ref();
PL_put_variable(ans);

predicate_t p_consult = PL_predicate("consult", 1, "database");
term_t t = PL_new_term_ref();
PL_put_string_chars(t, "new_gryffindor.pl");
PL_call_predicate(NULL, 0, p_consult, t);

fun = PL_new_functor(PL_new_atom("sits_right_of"),2);
PL_cons_functor(ans, fun, a, b);

char *fact1;
char *fact2;
if(PL_call(ans, NULL)) {
    PL_get_atom_chars(a, &fact1);

    PL_get_atom_chars(b, &fact2);
    cout << fact1 << " sits right of " << fact2; 
}

这个C ++代码给了我第一个谓词“sits_right_of”的结果,即“parvati坐在薰衣草右边”。但是我想在C ++中打印所有相关的“sits_right_of”谓词,就像prolog一样,它通过使用分号“;”来提供下一个类似谓词的值。

sits_right_of(X,Y).
X = parvati,
Y = lavender ;
X = lavender,
Y = neville ;
X = neville,
Y = alicia ;
X = alicia,
Y = fred ;
X = fred,
Y = george ;
X = george,
Y = lee ;
X = lee,
Y = dennis ;
X = dennis,
Y = dean ;
X = dean,
Y = ginny ;
X = ginny,
Y = angelina ;
X = angelina,
Y = seamus ;
X = seamus,
Y = colin ;
X = colin,
Y = harry ;
X = harry,
Y = hermoine ;
X = hermoine,
Y = ron ;
X = ron,
Y = natalie ;
X = natalie,
Y = katie ;
X = katie,
Y = parvati. 

我尝试用C ++循环语句,但它多次打印相同的输出..

所以请帮我打印一下C ++中prolog文件的其他类似谓词的值。

0 个答案:

没有答案