所以我这个学期刚开始使用 Prolog,并完成了一个非常基础的作业d(function, variable, derivative)
,我这样做了:
d(X,X,1) :- !.
d(C,X,0) :- atomic(C). %, (C \= X).
d(X**E,X,E*X**(E-1)).
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(U*V,X,DU*V+U*DV) :- d(U,X,DU), d(V,X,DV).
d(U/V,X,(DU*V-U*DV)/(V*V)) :- d(U,X,DU), d(V,X,DV).
我知道这并不完整,但它涵盖了练习中所需的所有任务。
然而,
?- d((x*x+2*x+3)/(3*x),x,R).
导致
R = ((1*x+x*1+ (0*x+2*1)+0)* (3*x)- (x*x+2*x+3)* (0*x+3*1))/ (3*x* (3*x)).
这看起来一点也不漂亮。is/2不幸的是不喜欢我的 x 因为它不是一个数字......
是否有一个简单的解决方案来实现更清洁的结果?