Prolog 中的幂函数

发布于 2024-08-28 21:58:05 字数 154 浏览 11 评论 0原文

Prolog 中幂函数的定义正是如此。我写了这段代码,它给出了一些错误,我想知道幂函数的确切代码。

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

这段代码有什么问题吗?

Exactly what's the Prolog definition for power function. I wrote this code and it give some errors I wanna know exact code for the power function.

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

Anything wrong with this code?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

痴情 2024-09-04 21:58:05

代码有两个问题。

  • 要在 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).

There are two problems with the code.

  • To do arithmetics in prolog you have to use is/2 instead of =
  • The variables in the multiplication had to be swapped (Z is Z1*X)
  • You should place a guard to ensure that the exponent is positive, otherwise you can have situations where the program won't terminate

Here is the fixed code:

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

Here is a second, tail recursive version using an accumulator

  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).
十级心震 2024-09-04 21:58:05

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

Have a look here - power function in prolog. The built-in pow predicate is not implemented in prolog for efficiency reason - as most arithmetic predicates.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文