Prolog Functor - 计算x ^ y

Amj*_*jad 3 prolog exponentiation iso-prolog

我是prolog的新手并且正在努力学习如何编程.我想知道如何x^y在Prolog中计算都是整数.

我知道事实是这样的事情:

% exp(y,x,z) <- z is x**y
Run Code Online (Sandbox Code Playgroud)

Tra*_*ers 10

试试这个:

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

Yes
?- exp(3,4,R).
R = 81
Run Code Online (Sandbox Code Playgroud)

与您的解决方案不同:

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

2)(**)/ 2产生一个浮点数.将float转换为整数有几种可能性.除了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.