【问题标题】:Prolog Functor - Computing x^yProlog 函子 - 计算 x^y
【发布时间】:2012-01-29 23:52:18
【问题描述】:

我是 prolog 的新手,正在尝试学习如何编程。我想知道如何在 Prolog 中计算 x^y 两者都是整数。

我知道它是这样的:

% exp(y,x,z) <- z is x**y

【问题讨论】:

  • 请使用谓词而不是仿函数。
  • 感谢@Mog 那里的有趣回答。我也想知道如何在 GNU Prolog 中测试它。请问有什么帮助吗?谢谢!
  • 好吧,我没有看到使用任何非标准谓词,因此您可以按原样对其进行测试。如果您需要有关如何在 gnu prolog 中编译/查阅文件的基本建议,可以使用许多教程,谷歌应该会尽快为您提供帮助。
  • 谢谢我知道怎么做。

标签: prolog exponentiation iso-prolog


【解决方案1】:

试试这个:

?- [user].
exp(X,Y,Z) :- Z is round(X**Y).

Yes
?- exp(3,4,R).
R = 81

与您的解决方案的不同之处:

1) (:-)/2 运算符通常在 Prolog 中用于定义规则,而不是 (->)/2 运算符。

2) (* * )/2 产生一个浮点数。有几种可能将浮点数转换为 一个整数。除了 floor/1 和 truncate/1,round/1 函数可能效果最好 这里 sind (**)/2 的结果可能不准确。

再见

P.S.:有一个原生整数幂函数的提议,它将使用运算符 (^)/2。欲了解更多信息,请参阅:

http://www.complang.tuwien.ac.at/ulrich/iso-prolog/dtc2#pow

本机幂函数可能会产生更好的结果,其中上述实现可能会遇到溢出或不精确的结果。这是一个具有不同结果的示例(SWI Prolog 5.11.33):

?- X 是圆形的(123.0**45.0)。
X = 11110408185131957010659080963921001637101840276079092263812695592440203675146350059871151325184。

?- X 是 123^45。
X = 11110408185131956285910790587176451918559153212268021823629073199866111001242743283966127048043。

【讨论】:

  • (^)/2 的提案现已成为标准!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-05
  • 2020-04-28
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
相关资源
最近更新 更多