Skip to main content
4 of 4
Commonmark migration

Variable scoping confusion

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?