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.