電子書籍の厳選無料作品が豊富!

PROLOG計算
prolog言語で積分計算のできるプログラムを作っています。
積分定数Cを表示させるようにしているのですが 、3*x^3の積分の結果が
3* (x^2/2+c)+cとなってしまいます。
()内のcを消すにはどーしたらよいでしょうか?
プログラムは以下のように書きました。
t(x,x^2/2+c).
t(Y ,Y*x+c) :- integer(Y).
t(Y+Z,TY+TZ+c):- t(Y,TY),t(Z,TZ).
t(Z*Y,Z*TY+c) :- integer(Z),t(Y,TY).
t(Y^N ,(1/N)*Y^N1*TY+c):-integer(N),N1 is N+1,t(Y,TY).
t(Y-Z,TY-TZ+c):-t(Y,TY),t(Z,TZ).

A 回答 (1件)

「積分定数をつけるだけ」のルール, たとえば


integrate(X, Y+c) :- integrate0(X, Y)
を作っておき, 途中の計算は積分定数なしで済ませることができれば簡単.

ところで, 「3*x^3の積分の結果」はどうやっても「3* (x^2/2+c)+c」にはならないんですが, それは問題なしでしょうか?

この回答への補足

ご返答ありがとうございます。
プログラムを書き直してみました。

(x,x^2/2).
t(Y ,Y*x) :- integer(Y).
t(Y+Z,TY+TZ):- t(Y,TY),t(Z,TZ).
t(Z*Y,Z*TY) :- integer(Z),t(Y,TY).
t(Y^N ,(1/N1)*Y^N1):-integer(N),N1 is N+1.
t(Y-Z,TY-TZ):-t(Y,TY),t(Z,TZ).
t(sin(Y), -cos(x)).
t(cos(Y),sin(x)) :.
t(tan(Y),-log(cos(Y))).
t(1/x ,log(x)).
t(X, Y+c):-t0(X, Y).

積分はうまくいくのですが、積分定数が付かないです。
よろしければアドバイスをお願いいたします。

補足日時:2011/11/28 14:46
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!