# Revision history [back]

Hugh Thomas pointed me to the following. When writting:

sage: foo = function('foo',x)


foo is actually foo(x). However, in h, and in particular in pieces like D[0](foo)'', it's not onlyfoo(x)'' that we want to replace, but foo''. So a trick is to store the result of function('foo',x) in another variable. And now, substituting with substitute function will work::

sage: var('a b x')
sage: f = function('foo',x)
sage: g = a*foo(x) + b*foo(x)^2
sage: h = diff(g, x)
sage: bar(x) = a*x + b
sage: h.substitute_function(foo, bar)
2*(a*x + b)*a*b + a^2


Now, some questions:

• Is there a way to recover foo from foo(x)? Something like foo(x).unapply()? Worst come to worst, one can use: sage.symbolic.function_factory.function('foo')

• Should substitute_function support:

sage: h.substitute_function(foo(x), bar)

Moral: side effects, like those with function, are ugly ...