apply(f,[x]) works because it uses the value binding of f to find a
function, whereas
f(x) uses the function binding of f, and based on the conventional lisp
way of doing this
from 1966, it uses the global function definition.
If you can use apply(f,[x]) or something similar, that would solve your
problem.
What some people do is they just use a very odd name and hope no one
else uses it. e.g.
test(%%f, x) := .....
RJF