declare
class Constante
attr val
meth init(C) val:=C end
meth derive(V E) E={New Constante init(0)} end
meth evalue(X) X=@val end
end
class Variable
attr var
meth init(X) var:=X end
meth set(X) var:=X end
meth derive(V E) if V==self then E={New Constante init(1)} else E={New Constante init(0)} end end
meth evalue(X) X=@var end
end
class Somme
attr expr1 expr2
meth init(E1 E2)
expr1:=@E1
expr2:=@E2
end
meth derive(V E) E1 E2 in
{@expr1 derive(V E1)}
{@expr2 derive(V E2)}
E={New Somme init(E1 E2)}
end
meth evalue(?X)
local X1 X2
in
{@expr1 evalue(X1)}
{@expr2 evalue(X2)}
X=X1+X2
end
end
end