无法从C+;访问Prolog中的所有相关谓词+; 我试图从C++访问Prolog文件的所有相关谓词。 我的prolog文件是

无法从C+;访问Prolog中的所有相关谓词+; 我试图从C++访问Prolog文件的所有相关谓词。 我的prolog文件是,c++,c++builder,ffi,swi-prolog,C++,C++builder,Ffi,Swi Prolog,“new_gryffindor.pl” 和我用C++代码、集成C++和Prolog文件 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(

“new_gryffindor.pl”

<>和我用C++代码、

集成C++和Prolog文件
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++中的循环语句,但是它打印了多次输出。 请帮助我在C++中打印Prolog文件的其他类似谓词的值。

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; 
}
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.