べき乗関数のプロローグ定義とは正確には何ですか。私はこのコードを書きましたが、累乗関数の正確なコードを知りたいといういくつかのエラーが発生しました。
pow(X,0,1).
pow(X,Y,Z):-Y1=Y-1,pow(X,Y1,Z1),Z1=Z*X.
このコードに何か問題がありますか?
べき乗関数のプロローグ定義とは正確には何ですか。私はこのコードを書きましたが、累乗関数の正確なコードを知りたいといういくつかのエラーが発生しました。
pow(X,0,1).
pow(X,Y,Z):-Y1=Y-1,pow(X,Y1,Z1),Z1=Z*X.
このコードに何か問題がありますか?
コードには 2 つの問題があります。
固定コードは次のとおりです。
pow(_,0,1).
pow(B,E,R) :- E > 0,!, E1 is E -1, pow(B,E1,R1), R is B * R1.
これは、アキュムレータを使用した 2 番目の末尾再帰バージョンです。
powa(B,E,R) :- powa(B,E,1,R).
powa(_,0,A,A).
powa(B,E,A,R) :- E > 0, !, E1 is E - 1, A1 is B * A, powa(B,E1,A1,R).
ここを見てください -プロローグのパワー関数。組み込みの pow 述語は、ほとんどの算術述語と同様に、効率上の理由から Prolog では実装されていません。