我在CS任务中遇到了一些麻烦。我试图调用我之前在新规则中创建的另一个规则,该规则将计算幂函数的阶乘(EX.Y =(N ^ X)!)。我认为我的代码的问题是当我调用阶乘(Y,Z)时,exp(Y,X,N)中的Y不会延续,但我并不完全确定。我一直试图找到一个这样的例子,但我找不到任何东西。
我不希望得到答案,因为这是家庭作业,但任何帮助将不胜感激。
这是我的代码:
/* 1.2: Write recursive rules exp(Y, X, N) to compute mathematical function Y = X^N, where Y is used
to hold the result, X and N are non-negative integers, and X and N cannot be 0 at the same time
as 0^0 is undefined. The program must print an error message if X = N = 0.
*/
exp(_,0,0) :-
write('0^0 is undefined').
exp(1,_,0).
exp(Y,X,N) :-
N > 0, !, N1 is N - 1, exp(Y1, X, N1), Y is X * Y1.
/* 1.3: Write recursive rules factorial(Y,X,N) to compute Y = (X^N)! This function can be described as the
factorial of exp. The rules must use the exp that you designed.
*/
factorial(0,X) :-
X is 1.
factorial(N,X) :-
N> 0, N1 is N - 1, factorial(N1,X1), X is X1 * N.
factorial(Y,X,N) :-
exp(Y,X,N), factorial(Y,Z).
答案 0 :(得分:1)
在factorial / 3中提到的Z变量(仅提到一次;所谓的'单例变量',不能与任何东西统一......)。
注意到有问题的评论,将其缩短为_赢得了工作,你必须用合理的价值来统一它(你想要用exp和factorial通过参数计算/链接子句的头部= >介绍一些参数"在中间" /未在头部提及。
编辑:我会为您重命名变量,也许您会更清楚地了解您所做的事情:
factorial(Y,X,Result) :-
exp(Y,X,Result), factorial(Y,UnusedResult).
现在你应该看看你的factorial / 3真正计算了什么,以及如何解决它。