我是 prolog 的新手,正在尝试学习如何编程。我想知道如何x^y
在 Prolog 中计算两者都是整数。
我知道事实是这样的:
% exp(y,x,z) <- z is x**y
我是 prolog 的新手,正在尝试学习如何编程。我想知道如何x^y
在 Prolog 中计算两者都是整数。
我知道事实是这样的:
% exp(y,x,z) <- z is x**y
尝试这个:
?- [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。