Я хочу сделать символическую программу дифференциации в OZ Mozart, но я застрял, не знаю, как начать, в прологе будет что-то вроде правил ниже, но мне нужна помощь по крайней мере в как сделать наиболее симплексное правило в OZ, производная от X равна 1, например, с тем, что я мог бы сделать остальную часть кода, спасибо!Как построить символический дифференциал OZ Mozart
d(X, X, 1):- !. /* d(X) w.r.t. X is 1 */
d(C, X, 0):- atomic(C). /* If C is a constant then */
/* d(C)/dX is 0 */
d(U+V, X, A+B):- /* d(U+V)/dX = A+B where */
d(U, X, A), /* A = d(U)/dX and */
d(V, X, B). /* B = d(V)/dX */
d(U-V, X, A-B):- /* d(U-V)/dX = A-B where */
d(U, X, A), /* A = d(U)/dX and */
d(V, X, B). /* B = d(V)/dX */
d(C*U, X, C*A):- /* d(C*U)/dX = C*A where */
atomic(C), /* C is a number or variable */
C \= X, /* not equal to X and */
d(U, X, A), !. /* A = d(U)/dX */
d(U*V, X, B*U+A*V):- /* d(U*V)/dX = B*U+A*V where */
d(U, X, A), /* A = d(U)/dX and */
d(V, X, B). /* B = d(V)/dX */
d(U/V, X, (A*V-B*U)/(V*V)):- /* d(U/V)/dX = (A*V-B*U)/(V*V) */
d(U, X, A), /* where A = d(U)/dX and */
d(V, X, B). /* B = d(V)/dX */
d(U^C, X, C*A*U^(C-1)):- /* d(U^C)/dX = C*A*U^(C-1) */
atomic(C), /* where C is a number or */
C\=X, /* variable not equal to X */
d(U, X, A). /* and d(U)/dX = A */
d(U^C, X, C*A*U^(C-1)):- /* d(U^C)/dX = C*A*U^(C-1) */
C = -(C1), atomic(C1), /* where C is a negated number or */
C1\=X, /* variable not equal to X */
d(U, X, A). /* and d(U)/dX = A */
d(sin(W), X, Z*cos(W)):- /* d(sin(W))/dX = Z*cos(W) */
d(W, X, Z). /* where Z = d(W)/dX */
d(exp(W), X, Z*exp(W)):- /* d(exp(W))/dX = Z*exp(W) */
d(W, X, Z). /* where Z = d(W)/dX */
d(log(W), X, Z/W):- /* d(log(W))/dX = Z/W */
d(W, X, Z). /* where Z = d(W)/dX */
d(cos(W), X, -(Z*sin(W))):- /* d(cos(W))/dX = Z*sin(W) */
d(W, X, Z). /* where Z = d(W)/dX */