About sanitizing Maxima via gensym.
The function arguments may have very different bindings:
as a function, as an array, property list, etc.
So I suggest one of these two options:
1.- When replacing an argument s with gensym copy all these properties
before evaluating the argument.
2.- Define the functions like in this example:
f(s_Array, g_Function) := ...
This way is clear what the symbol s stand for.
In other languages this problem doesn't exists because each symbol has
only one binding:
In C, int i
char j
int *k
In Maxima the only way to make a function with argument "s" is to pass to
the function all the information about symbol "s", so clearly you can't
pass the function a value and then try to use it as a function.
Best Regards
-Miguel.