Изучение основных способов представления математических проблем в символьном виде, пригодном для формальной обработки на компьютере, страница 3

potensexp(TOKL,TOKL,EXP);

potensexp1(TOKL,TOKL,EXP,EXP);

multexp(TOKL,TOKL,EXP);

multexp1(TOKL,TOKL,EXP,EXP);

plusexp(TOKL,TOKL,EXP);

plusexp1(TOKL,TOKL,EXP,EXP);

elmexp(TOKL,TOKL,EXP);

reduce(EXP,EXP);        /* Reducer */

doreduce(EXP,EXP);

plusr(EXP,EXP,EXP);

minusr(EXP,EXP,EXP);

multr(EXP,EXP,EXP);

divr(EXP,EXP,EXP);

lnr(EXP,EXP)

/* String Editor */

editstr(string,string,integer,integer,integer).

editstr(char,string,string,integer,integer,integer).

editstr(symbol,char,string,string,integer,integer,integer).

lstcat(TOKL,string)

repeat

GOAL

run.

CLAUSES

run:-

makewindow(1,71,7,"",0,0,25,80),

makewindow(1,71,7,"",1,14,9,52),

write("            СИМВОЛЬНОЕ  ИНТЕГРИРОВАНИЕ         "),nl,

write("   ********************************************"),nl,

field_attr(0,3,44,112),

write(" Выражение может содержать  следующие операции:"),nl,

write(" сложение, вычитание, умножение, деление, sin \n"),

write(" cos, sin ,tan, нат. логарифмы и степени.\n\n"),

write(" e.g. x+x  or  x*(2+y)^2  or  ln(1+1/(1-x))"),

makewindow(3,7,7,"",10,3,14,73),

clearwindow, integr.

integr:readexp(EXP),

i(EXP,var(x),EXP1),

write("\n  Integrated expression:\n  "),

writeexp(EXP1),

write("\n\n  Reduced expression:\n  "),

doreduce(EXP1,EXP2), writeexp(EXP2),

write("\n\n  Hit any key to continue..."),readchar(_),

fail.

integr :- integr.      

repeat.

repeat:- repeat.

%Предикат константы

const(flt(_),_):-!.

const(var(i),_):-!.

const(var(X),var(Y)):-X<>Y, !.

const(var(_),flt(_)):-!.

const(mult(E1,E2),X):-const(E1,X), const(E2,X), !.

const(plus(E1,E2),X):-const(E1,X), const(E2,X), !.

const(minus(E1,E2),X):-const(E1,X), const(E2,X), !.

const(div(E1,E2),X):-const(E1,X), const(E2,X), !.

const(potens(E1,E2),X):-const(E1,X), const(E2,X), !.

const(ln(E),X):-const(E,X), !.

const(abs(E),X):-const(E,X), !.

const(sin(E),X):-const(E,X), !.

const(cos(E),X):-const(E,X), !.

const(tan(E),X):-const(E,X), !.

const(sec(E),X):-const(E,X), !.

const(atan(E),X):-const(E,X), !.

const(asin(E),X):-const(E,X), !.

const(E,plus(E1,E2)):-const(E,E1), const(E,E2), !.

const(E,minus(E1,E2)):-const(E,E1), const(E,E2), !.

const(E,mult(E1,E2)):-const(E,E1), const(E,E2), !.

const(E,div(E1,E2)):-const(E,E1), const(E,E2), ! .

const(E,potens(E1,E2)):-const(E,E1), const(E,E2), !.

const(E,sin(E1)):-const(E,E1), !.

const(E,cos(E1)):-const(E,E1), !.

const(E,sec(E1)):-const(E,E1), !.

const(E,tan(E1)):-const(E,E1), !.

const(E,ln(E1)):-const(E,E1), !.

const(E,abs(E1)):-const(E,E1), !.

const(E,asin(E1)):-const(E,E1), !.

const(E,atan(E1)):-const(E,E1), !.

%Равенство выражений:

equal(X,X):-!.

/*

Интегрирование

*/

% +\i(plus(U,V),X,plus(U1,V1)):-i(U,X,U1), i(V,X,V1), !.

i(minus(U,V),X,minus(U1,V1)):-i(U,X,U1), i(V,X,V1), !.

i(E,X,mult(E,X)):-const(E,X), !.

i(X,X,div(potens(X,flt(2)),flt(2))):-!.

i(div(flt(1),X),X,ln(abs(X))):-!.

i(potens(X,flt(-1)),X,ln(abs(X))):-!.

i(potens(X,flt(N)),X,div(potens(X,flt(M)),flt(M))):-N<>-1, M=N+1, !.

i(sin(X),X,mult(flt(-1),cos(X))):-!.

i(cos(X),X,sin(X)):-!.

i(tan(X),X,mult(flt(-1),ln(abs(cos(X))))):-!.

i(potens(sin(X),flt(2)),X,minus(div(X,flt(2)),div(sin(mult(flt(2),X)),flt(4)))):-!.

i(potens(cos(X),flt(2)),X,plus(div(X,flt(2)),div(sin(mult(flt(2),X)),flt(4)))):-!.

i(potens(sin(X),flt(3)),X,minus(div(potens(cos(X),flt(3)),flt(3)),cos(X))):-!.

i(potens(cos(X),flt(3)),X,minus(sin(X),div(potens(sin(X),flt(3)),flt(3)))):-!.

i(potens(sin(X),flt(N)),X,minus(div(mult(V,flt(K)),flt(N)),div(mult(potens(sin(X),flt(K)),cos(X)),flt(N)))):-N1=trunc(N), N2=N-N1, N2=0, M=N-2, K=N-1, i(potens(sin(X),flt(M)),X,V),!.

i(potens(cos(X),flt(N)),X,plus(div(mult(V,flt(K)),flt(N)),div(mult(potens(cos(X),flt(K)),sin(X)),flt(N)))):-N1=trunc(N), N2=N-N1, N2=0, M=N-2, K=N-1, i(potens(cos(X),flt(M)),X,V),!.

i(potens(plus(mult(A,X),B),flt(N)),X,div(potens(plus(mult(A,X),B),flt(M)),mult(A,flt(M)))):-N<>-1,M=N+1,const(A,X), const(B,X),!.