1
您好每个身体我有简单的prolog文件计算阶乘,我想知道如何咨询factorial.pl文件,并通过C++调用它的命名事实模块。如何将现有的prolog文件转换为C++及其模块?
这是我的示例代码,但它无法正常工作。
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <SWI-Prolog.h>
#include <SWI-Stream.h>
#include <SWI-cpp.h>
int main(int argc, char **argv)
{
PL_initialise(argc, argv);
predicate_t p_consult = PL_predicate("consult", 1, "database");
term_t t = PL_new_term_refs(3);
PL_put_string_chars(t, "D:\\factorial.pl");
PL_put_integer(t + 1, 5);
PL_put_variable(t + 2);
qid_t query = PL_open_query(NULL, PL_Q_NORMAL, p_consult, t);
int result = PL_next_solution(query);
if (result)
{
int x;
PL_get_integer(t + 2, &x);
cout << "Found solution " << x << endl;
}
PL_close_query(query);
cin.ignore();
return 0;
}
和factorial.pl
fact(N, F) :- N =< 1, F is 1.
fact(N, F) :- N > 1, fact(N - 1, F1), F is F1 * N.