minusr(X,mult(Y,flt(F)),R):-F<0, F1=-F, plusr(X,mult(flt(F1),Y),R),!.
/* End */
minusr(X,Y,minus(X,Y)).
/*
CLAUSES FOR REDUCTION OF A MULTIPLICATION EXPRESSION
*/
multr(flt(X),flt(Y),flt(Z)):-!,
X*Y=Z.
multr(flt(0),_,flt(0)):-!.
multr(_,flt(0),flt(0)):-!.
multr(flt(1),X,X):-!.
multr(X,flt(1),X):-!.
multr(M,plus(X,Y),plus(X1,Y1)):-!,
multr(M,X,X1),multr(M,Y,Y1).
multr(M,minus(X,Y),minus(X1,Y1)):-!,
multr(M,X,X1),multr(M,Y,Y1).
multr(plus(X,Y),M,plus(X1,Y1)):-!,
multr(M,X,X1),multr(M,Y,Y1).
multr(minus(X,Y),M,minus(X1,Y1)):-!,
multr(M,X,X1),multr(M,Y,Y1).
multr(mult(flt(I1),X),flt(I2),M1):-!,
I1*I2=I3,
multr(flt(I3),X,M1).
multr(flt(I1),mult(flt(I2),X),M1):-!,
I1*I2=I3,
multr(flt(I3),X,M1).
multr(mult(flt(I1),X),mult(flt(I2),Y),mult(flt(I3),R)):-!,
I1*I2=I3,
multr(X,Y,R).
multr(mult(flt(I),X),Y,mult(flt(I),R)):-!,
multr(X,Y,R).
multr(X,flt(I),mult(flt(I),X)):-!.
multr(var(i),var(i),flt(-1)):-!.
multr(var(i),X,R):-multr(X,var(i),R),!.
multr(mult(X,var(i)),var(i),M1):-!,
multr(flt(-1),X,M1).
multr(var(i),mult(X,var(i)),M1):-!,
multr(flt(-1),X,M1).
multr(mult(X,var(i)),mult(Y,var(i)),mult(flt(-1),R)):-!,
multr(X,Y,R).
multr(mult(X,var(i)),Y,mult(R,var(i))):-!,
multr(X,Y,R).
multr(var(i),X,mult(X,var(i))):-!.
multr(potens(X,flt(I1)),potens(X,flt(I2)),potens(X,flt(I3))):-!,
I3=I1+I2.
multr(X,potens(X,flt(I)),potens(X,flt(I1))):-!,
I1=I+1.
multr(potens(X,flt(I)),X,potens(X,flt(I1))):-!,
I1=I+1.
multr(X,X,potens(X,flt(2))):-!.
multr(tan(X),cos(X),sin(X)):-!.
multr(cos(X),tan(X),sin(X)):-!.
multr(X,Y,mult(X,Y)).
/*
CLAUSES FOR REDUCTION OF A DIVISION EXPRESION
*/
divr(flt(0),_,flt(0)):-!.
divr(X,flt(F),Y):-F<>0, Z=1/F, multr(flt(Z),X,Y),!.
divr(flt(X),flt(Y),flt(Z)):-Y<>0, Z=X/Y, !.
divr(_,flt(0),var("'endless'")):-!,
write("division by zero"),nl.
divr(X,flt(1),X):-!.
divr(sin(X),cos(X),tan(X)):-!.
divr(X,Y,div(X,Y)).
/*
CLAUSES FOR REDUCTION OF A LOGARITHM EXPRESSION
*/
lnr(flt(0),var("endless")):-!,
write("logarithm error"),nl.
lnr(flt(1),flt(0)):-!.
lnr(X,ln(X)).
/*
CLAUSES FOR CONVERTING AN EXPRESSION TO A STRING
*/
% Taken from the old writeexp clauses
strexp(var(NAME),NAME).
strexp(flt(FLT),FLTSTR) :- FLT<0, str_real(S,FLT), concat("(",S,S1),
concat(S1,")",FLTSTR),!.
strexp(flt(FLT),FLTSTR) :str_real(FLTSTR,FLT).
strexp(ln(EXP),STR) :strPAR(EXP,STRp),
concat("ln",STRp,STR).
strexp(sin(EXP),STR) :-
strPAR(EXP,STRp),
concat("sin",STRp,STR).
strexp(cos(EXP),STR) :-
strPAR(EXP,STRp),
concat("cos",STRp,STR).
strexp(tan(EXP),STR) :-
strPAR(EXP,STRp),
concat("tan",STRp,STR).
strexp(atan(EXP),STR) :-
strPAR(EXP,STRp),
concat("arctan",STRp,STR).
strexp(asin(EXP),STR) :-
strPAR(EXP,STRp),
concat("arcsin",STRp,STR).
strexp(sec(EXP),STR) :-
strPAR(EXP,STRp),
concat("sec",STRp,STR).
strexp(abs(EXP),STR) :strexp(EXP, S0),
concat("|",S0,S1),
concat(S1,"|",STR).
strexp(plus(EXP1,EXP2),STR):strexp(EXP1,STR1),
concat(STR1,"+",STR3),
strexp(EXP2,STR2),
concat(STR3,STR2,STR).
strexp(minus(EXP1,EXP2),STR):strexp(EXP1,STR1),
concat(STR1,"-",STR3),
strMINUS(EXP2,STR2),
concat(STR3,STR2,STR).
strexp(mult(EXP1,EXP2),STR):strMINUS(EXP1,STR1),
concat(STR1,"*",STR3),
strMULT(EXP2,STR2),
concat(STR3,STR2,STR).
strexp(div(EXP1,EXP2),STR):strMULT(EXP1,STR1),
concat(STR1,"/",STR3),
strDIV(EXP2,STR2),
concat(STR3,STR2,STR).
strexp(potens(EXP1,EXP2),STR):strDIV(EXP1,STR1),
concat(STR1,"^",STR3),
strPOTENS(EXP2,STR2),
concat(STR3,STR2,STR).
strPOTENS(div(X,Y),STR):-!,strPAR(div(X,Y),STR).
strPOTENS(X,STR):-strDIV(X,STR).
strDIV(mult(X,Y),STR):-!,strPAR(mult(X,Y),STR).
strDIV(X,STR):-strMULT(X,STR).
strMULT(minus(X,Y),STR):- !,strPAR(minus(X,Y),STR).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.