숫자의 계승을 연구하고 싶습니다. 내 계승 규칙은 Prolog 파일에 있으며 C++ 파일에 연결하고 있습니다. 누군가가 Prolog와 인터페이싱 C++의 문제점을 말해 줄 수 있습니까?프롤로그 및 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);
}
마지막 줄의 프롤로그 프롬프트가 나타납니다. 그러나 다음과 같은 계승 계산의 결과를 얻지 못합니다.
?- factorial(5, X).
X = 120
true
무엇이 누락 되었습니까?
감사합니다,
무엇이 오류입니까? –
사소한 점 : 자르기 연산자를 사용할 필요가 없다고 생각합니다. '계승 (1,1)'이라고 쓰십시오. (내 프롤로그는 매우 녹슬고 잘못하면 사과합니다.) –
일어날 것으로 예상되는 것, 실제로 일어나고있는 것, 그리고 후자가 이전과 다른 것을 설명해야합니다 . 나는 Jon Skeet을 제외하고는 SO의 구성원들에게 ESP가 없다고 감히 이야기합니다. –