prolog中的电源功能

时间:2010-04-17 15:47:23

标签: prolog exponentiation

究竟什么是Prolog对幂函数的定义。我写了这段代码并且它给出了一些错误我想知道功能函数的确切代码。

pow(X,0,1).
pow(X,Y,Z):-Y1=Y-1,pow(X,Y1,Z1),Z1=Z*X.

此代码有什么问题吗?

2 个答案:

答案 0 :(得分:2)

代码存在两个问题。

  • 要在prolog中进行算术,你必须使用is / 2而不是=
  • 必须交换乘法中的变量(Z为Z1 * X)
  • 您应该设置一名警卫以确保指数为正数,否则您可能会遇到程序无法终止的情况

这是固定代码:

  pow(_,0,1).
  pow(B,E,R) :- E > 0,!, E1 is E -1, pow(B,E1,R1), R is B * R1.

这是使用累加器的第二个尾递归版本

  powa(B,E,R) :- powa(B,E,1,R).
  powa(_,0,A,A).
  powa(B,E,A,R) :- E > 0, !, E1 is E - 1, A1 is B * A, powa(B,E1,A1,R).

答案 1 :(得分:1)

看看这里 - power function in prolog。出于效率原因,内置的pow谓词没有在prolog中实现 - 正如大多数算术谓词一样。