Prolog Error: Out of Local Stack in factorial

Prolog Error: Out of Local Stack in factorial

我正在尝试在 prolog 中生成阶乘代码,但出现了超出本地堆栈的错误,也就是说,它陷入了无限循环。我不明白怎么办。 这是我的代码:

fact(0,1).
fact(1,1).

fact(X,Y):- X\==0, A=X-1, fact(A,Z), Y=X*Z.

我哪里错了?

A=X-1,后来是Y=X*Z。 Prolog 顶层的伟大之处在于您可以轻松地尝试您的代码的功能:

?- A = X-1.
A = X-1.

?- A = 5-1.
A = 5-1.

显然,Prolog 在嘲笑我们:)。 =运算符用于合一;如果你想做算术,你必须使用 is/2:

?- is(A, -(5, 1)).
A = 4.

通常写成:

?- A is 5-1.
A = 4.

这只是为了向您展示表达式是一个术语,并且在其第二个参数中评估该术语:

?- Expr = X-1, X = 3, Result is Expr.
Expr = 3-1,
X = 3,
Result = 2.

根据您对阶乘的定义:如果您修正算术,它应该可以工作。请注意,如果 X 的条件在开始时说的是 X > 1 而不是 X \== 0 会更清晰:您当前的程序对 fact(1,F) 做了什么,以及有多少答案你明白了吗?