:-op(300,yfx,^). %% x dx = 1 %% c dx = 0 %% -u dx = - (u dx) %% u+v dx = (u dx) + (v dx) %% u*v dx = u*(v dx) + v*(u dx) d(X,X,1):-!. d(C,X,0):-atomic(C). d(-U,X,-A):-d(U,X,A). d(U+V,X,A+B):-d(U,X,A),d(V,X,B). d(U-V,X,A-B):-d(U,X,A),d(V,X,B). d(C*U,X,C*A):-atomic(C), \+ C=X, d(U,X,A),!. d(U*V,X,B*U+A*V):-d(U,X,A),d(V,X,B). d(U/V,X,A):-d(U*V^(-1),X,A). d(U^C,X,U^(C-1)*W):-atomic(C),\+ C=X,d(U,X,W). d(log(U),X,A*U^(-1)):-d(U,X,A). :- op(500,fx,'--'). %% fx --x %% fy --x