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
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
これを試して:
?- [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.