MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Dynamic function application problem

  • To: mathgroup at smc.vnet.net
  • Subject: [mg108041] Dynamic function application problem
  • From: István <replicatorzed at gmail.com>
  • Date: Sun, 7 Mar 2010 04:03:06 -0500 (EST)

Dear All,

every time I construct a simple interface for something like the
common demonstration "Understanding function x" to get a grip on the
behaviour of the function, I run into
some unresolvable problem of Dynamic. I mean: EVERY time. This is the
newest one.

The interface uses a master slider that controls the length (n) of a
list (set). Each element in this list has an independent slider to
control its value. What I want to do is to allow the values in set to
be saved in some way. That is, if the user increases n from default 2
to e.g. 4, and then changes the value of set[[2]], and then decides to
go back to n = 2, the set should keep the changed value. That's why I
use the 'truncate' function. To conclude:

time1: n = 2, set = {1, 2}
time2: n = 4, set = {1, 2, 3, 4} (user increased n)
time3: n = 4, set = {1, 7, 3, 4} (user changed set[[2]])
time4: n = 2, set = {1, 7} (user decreased n)

And the code is below. Be aware that this is a TOY modell with the
sole purpose of demonstraing a problem I don't understand, please
don't ask questions like "your function 'update' is an unnecessary
intermediate step, why do you use it??".


DynamicModule[{
  n = 2, m = 8, def, set,
  update, truncate
  },

 Panel@Column@{
    Slider[Dynamic[n, (n = #; update[#]) &], {1, m, 1},
     ImageSize -> 110],
    Dynamic@
     Column[Slider[Dynamic@set[[#]], {1, 30, 1}, ImageSize -> 110] & /
@
        Range@n],
    Dynamic@Column@{n, set}
    },

 Initialization :> (
   truncate[set_, n_, def_] :=
    If[n <= Length@set, Take[set, n],
     Join[set, Take[def, {n + 1, Length@def}]]];

   update[n_] := (
     set = truncate[set, n, def];
     );

   def = Range@m;
   update@n;
   )
 ]


At present, the code simply cannot deal with truncate, and crashes
(with fresh kernel), or at least produces severe errors due to
recursion problems (with old kernel). Could you please suggest a
resolution for this matter?

Thank you in advance

Istvan


  • Prev by Date: Re: auto-save in Mathematica
  • Next by Date: Re: removing non-numeric elements from the table
  • Previous by thread: Re: Conjugate of symbolic expressions
  • Next by thread: Re: Dynamic function application problem