序言阶乘递归给出表达式作为输出
prolog factorial recursion giving expression as output
我写了一个 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)))]。我怎样才能得到一个值而不是一个表达式。
@lurker 的评论有点简单。比较运算符 do 计算表达式。因此,您的代码可以正常工作:
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.
我写了一个 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)))]。我怎样才能得到一个值而不是一个表达式。
@lurker 的评论有点简单。比较运算符 do 计算表达式。因此,您的代码可以正常工作:
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.