Я хотел бы разработать факториал номера. Мое факториальное правило находится в файле Prolog, и я подключаю его к файлу C++. Может кто-нибудь, пожалуйста, скажите мне, что не так с моим интерфейсом C++ для Prolog?Factorial in Prolog и C++
my factorial.pl file:
factorial(1, 1):-
!.
factorial(X, Fac):-
X > 1,
Y is X - 1,
factorial(Y, New_Fac),
Fac is X * New_Fac.
my factorial.cpp file:
headerfiles
term_t tf;
term_t tx;
term_t goal_term;
functor_t goal_functor;
int main(int argc, char** argv)
{
argv[0] = "libpl.dll";
PL_initialise(argc, argv);
PlCall("consult('factorial.pl')");
cout << "Enter your factorial number: ";
long nf;
cin >> nf;
tf = PL_new_term_ref();
PL_put_integer(tf, nf);
tx = PL_new_term_ref();
goal_term = PL_new_term_ref();
goal_functor = PL_new_functor(PL_new_atom("factorial"), 2);
rval = PL_cons_functor(goal_term, goal_functor, tf, tx);
PL_halt(PL_toplevel() ? 0 : 1);
}
Я получаю приглашение Prolog, что и делает последняя строка. Но я не получаю результат факториала, например:
?- factorial(5, X).
X = 120
true
Что мне не хватает?
Спасибо,
Какая у вас ошибка? –
Незначительная точка: я не думаю, что вам нужно использовать оператора выреза. Просто напишите 'factorial (1,1) .' (Мой Пролог очень ржавый, поэтому извиняюсь, если это неправильно.) –
Вы должны указать, что вы ожидаете, что происходит на самом деле, и как последний отличается от прежнего , Я смею сказать, что члены SO, кроме Jon Skeet, возможно, не имеют ESP. –