prolog中的阶乘(一般递归) - 为什么术语的顺序很重要

时间:2012-05-09 19:23:19

标签: recursion prolog factorial

为什么这个因子实现不起作用:

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.

1 个答案:

答案 0 :(得分:2)

因为is/2需要右侧完全实例化。

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