2

I am new to prolog and trying out to learn how to program. I want to know how to compute x^y in Prolog both being integers.

I know for a fact that it goes something like this:

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

1 に答える 1

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 を生成します。浮動小数点を整数に変換する可能性がいくつかあります。floor/1 と truncate/1 に加えて、(**)/2 の結果が正確ではない可能性があるため、ここでは round/1 関数がおそらく最適に機能します。

さよなら

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.

于 2011-12-29T16:57:09.780 に答える