2011-12-29 13 views
3

私はプロローグには新しく、プログラミング方法を学ぶために試しています。私は両方とも整数であるPrologでx^yを計算する方法を知りたい。これを試してみてくださいプロローグFunctor - コンピューティングx^y

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

検索しましたか? –

+1

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

+0

の代わりに述部を使用してください。ファンクタbtw。 – m09

答えて

10

:あなたのソリューションへ

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

Yes 
?- exp(3,4,R). 
R = 81 

違い:私はそれがこのような何かを行くという事実を知って

1)( - )/ 2演算子は通常、( - >)/ 2演算子ではなくルールを定義するためにPrologで使用されます。

2)(* *)/ 2はfloatを生成します。 floatを に変換するには、いくつかの可能性があります。 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