Forgive me if this question has been asked prior (I wouldn't even know where to start looking for an answer to this problem to be honest). I know the following code in Mathematica works:
temp = {x^2,Sin[x]}; (* Just a random list with functions inside *)
f = Function[x,Evaluate[temp[[1]]]];
f[3]
The code would output the appropriate 9 as required. However, the problem occurs when I try to use a similar logic within a Manipulate function as shown below:
Manipulate[
Module[{temp,f},
temp = {x^2,Sin[x]};
f = Function[x,Evaluate[temp[[1]]]];
{num, f[num]}],
{num, 3}]
Running the above code yields an output {3, x^2} and it doesn't change for any num. Any suggestions would be exceedingly helpful. For context as to why I'm doing this, I'm solving a differential equation within the Manipulate expression (where end conditions are manipulated by the controls). Using DSolve outputs the required functions in a list and I would simply like to graph them and their derivatives. If you know a better method of doing that, that would also be helpful.
Update
It appears that the problem is, in fact, with variable typing as shown below:
temp = {x^2, Sin[x]}; (*Just a random list with functions inside*)
f = Function[x, Evaluate[temp[[1]]]];
f[3]
Manipulate[
Module[{temp, f},
temp = {x^2, Sin[x]};
f = Function[x, Evaluate[temp[[1]]]];
{Head[temp], Head[f], Head[f[num]], Head[f[3]]}],
{num, 5}]
{Head[temp], Head[f], Head[f[3]]}
Note that the Head[f[num]] and Head[f[3]] within the Manipulate expression evaluate to Power whereas the Head[f[3]] outside evaluates to Integer (as expected). Using IntegerPart[] however still doesn't yield an appropriate answer. Any thoughts?


{x, ...}(= List[x, temp[[1]]}) is evaluated before the headListis replaced byFunction. So the body is not changed *after*Functionis in place, but before. If the body is changed after, the parameterxis renamedx$.Manipulatereprocesses its code, rewriting its variables, such asnum, by adding$$to them (e.g.num$$) and so forth -- it's somewhat complicated, too much so for a comment. I think somehow this causes thexto becomex$when inside theManipulate`. – Michael E2 Mar 20 '18 at 03:37Moduleand assumed it wasManipulate. The Q&A you linked mainly discussesModule[{x,..}, Function[x, Evaluate[..]]], or so it seems to me; but the renaming ofxoccurs whenever theEvaluate[..]contains anyModulevariables, whether there is a naming conflict or not. Nonetheless, this seems to be dupe. – Michael E2 Mar 20 '18 at 11:46