- 締切済み
prologでの数式の簡単化
prologで微分をするプログラムを作ったのですが計算した結果が、例えば、 0*x^2+a*(2*x^1*1)+(0*x+b*1)+0 のように無駄に長くなってしまいます。そこでこれを簡単化する述語simple(P)を作りたいのですがどのようにしたら良いでしょうか? ?- simple(0*x^2+a*(2*x^1*1)+(0*x+b*1)+0). 2*a*x+b yes できれば上のような動作がするぐらいのものが作りたいです。 少なくとも余計な0,1を除去するくらいはしたいのですが・・・ お願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- rabbit_cat
- ベストアンサー率40% (829/2062)
こんな感じでどうでしょう。(かなり無駄がある気がしますが) simple(X^0,1). simple(X^1,X). simple(0*X,0). simple(X*0,0). simple(1*X,X1) :- simple(X,X1). simple(X*1,X1) :- simple(X,X1). simple(0+X,X1) :- simple(X,X1). simple(X+0,X1) :- simple(X,X1). simple(X*Y,Z) :- simple(X,X1),not(X=X1),!,simple(X1*Y,Z). simple(X*Y,Z) :- simple(Y,Y1),not(Y=Y1),!,simple(X*Y1,Z). simple(X+Y,Z) :- simple(X,X1),not(X=X1),!,simple(X1+Y,Z). simple(X+Y,Z) :- simple(Y,Y1),not(Y=Y1),!,simple(X+Y1,Z). simple(X,X). ?- simple(0*x^2+a*(2*x^1*1)+(0*x+b*1)+0,X). X = a*(2*x)+b Yes