2

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

我知道事实是这样的:

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

1 回答 1

10

尝试这个:

?- [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 函数可能在这里效果最好,因为 (**)/2 的结果可能不精确。

再见

PS:有一个原生整数幂函数的提议,它将使用运算符 (^)/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。

于 2011-12-29T16:57:09.780 回答