2011-12-29 66 views
3

我是prolog的新手,并尝试学习如何编程。我想知道如何在Prolog中计算x^y,它们都是整数。Prolog Functor - Computing x^y

我知道一个事实,即它是这样的:

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

你有没有搜索过任何东西? – 2011-12-29 15:48:27

+1

http://stackoverflow.com/questions/8240952/rule-to-calculate-power-of-a-number-when-the-exponent-is-negative-in-prolog/8241403#8241403 – m09 2011-12-29 15:51:18

+0

请使用谓词,而不是函子顺便说一句。 – m09 2011-12-29 15:53:00

回答

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的结果可能不准确。

再见

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.

+1

“(^)/ 2”的提案现在已经成为标准! – false 2012-02-17 00:46:58