2011-12-29 63 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