Re: Manipulate function

*To*: mathgroup at smc.vnet.net*Subject*: [mg100935] Re: [mg100926] Manipulate function*From*: John Fultz <jfultz at wolfram.com>*Date*: Thu, 18 Jun 2009 06:18:50 -0400 (EDT)*Reply-to*: jfultz at wolfram.com

On Thu, 18 Jun 2009 04:54:34 -0400 (EDT), Przemyslaw Swatek wrote: > hi ! > > I have some problem (Mathematica 6) - when I type > Manipulate[Plot[If[x < 0, n Sin[x], Cos[x]], {x, -10, 10}], {n, 0, 1}] > all is ok, but when i try: > > M[x_]:=If[x < 0, n Sin[x], Cos[x]], {x, -10, 10}] and then > > Manipulate[Plot[M[x], {x, -10, 10}], {n, 0, 1}] it doesn`t work - I > cannot manipulate varible of n. Whay ? Manipulate (via DynamicModule) is using lexical scoping, which means that it only replaces values of 'n' which are literally in the body of the Manipulate expression. 'n' shows up nowhere in the expression 'M[x]'. If you tried to do a similar substitution for values of 'n' using Module or With, you'd run into a similar problem. Only Block[], with its use of dynamic scoping, is capable of doing this. Look for the following in the help viewer for more info: tutorial/BlocksComparedWithModules The correct way to deal with this is to add a second argument to M which represents the variable 'n'. I.e., M[x_, n_] := If[x < 0, n Sin[x], Cos[x]] Manipulate[Plot[M[x, n], {x, -10, 10}], {n, 0, 1}] Sincerely, John Fultz jfultz at wolfram.com User Interface Group Wolfram Research, Inc.