0

为什么这个阶乘实现不起作用:

factorial(0, B) :- B is 1.
factorial(A, B) :-
                   A > 0,
                   Ax is A-1,
                   B is A*Bx,
                   factorial(Ax, Bx).

这有效:

factorial2(0, B) :- B is 1.
factorial2(A, B) :-
                   A > 0,
                   Ax is A-1,
                   factorial2(Ax, Bx),
                   B is A*Bx.
4

1 回答 1

2

因为is/2需要右手边被完全实例化。

在您的第一个示例中, Bx 未实例化并在右侧使用,而在您的第二个示例中,它在实例化后使用。

于 2012-05-09T19:34:23.427 回答