我写了一个prlog递归因子子句,它是:
factorial(X,Y):-
(X>1)
-> factorial(X-1,X*Y)
; write(Y).
问题是,对于任何有效的调用[例如,factorial(5,1)。它给出表达式而不是值[(5-1-1-1)*((5-1-1)*((5-1)*(5 * 1)))]。我怎样才能得到一个值而不是一个表达式。
答案 0 :(得分:1)
@lurker的评论有点过分了。比较运算符执行计算表达式。因此,您的代码可以正常工作:
factorial(X,Y):- X>1 -> factorial(X-1,F), Y=X*F ; Y=1.
?- factorial(5,X),F is X.
X = 5*((5-1)*((5-1-1)*((5-1-1-1)*1))),
F = 120.