Prolog递归(幂函数的因子)

时间:2015-12-05 22:56:44

标签: recursion prolog parameter-passing

我在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).

1 个答案:

答案 0 :(得分:1)

在factorial / 3中提到的Z变量(仅提到一次;所谓的'单例变量',不能与任何东西统一......)。

注意到有问题的评论,将其缩短为_赢得了工作,你必须用合理的价值来统一它(你想要用exp和factorial通过参数计算/链接子句的头部= >介绍一些参数"在中间" /未在头部提及。

编辑:我会为您重命名变量,也许您会更清楚地了解您所做的事情:

factorial(Y,X,Result) :-
    exp(Y,X,Result), factorial(Y,UnusedResult).

现在你应该看看你的factorial / 3真正计算了什么,以及如何解决它。