Date: Mar 24, 2013 4:16 AM
Author: Bob Hanlon
Subject: Re: Manipulate and Initialization

Use Dynamic

nn = 23;
Manipulate[n,
{n, 1, Dynamic[nn], 1, Appearance -> "Labeled"},
Initialization :>
(nn = RandomInteger[{5, 15}]; Print[nn])]


Bob Hanlon


On Sat, Mar 23, 2013 at 3:24 AM, Fred Simons <f.h.simons@tue.nl> wrote:
> I want to create a rather complicated Manipulate, in which I do not know
> the limits for the parameter beforehand; they depend on the result of an
> initialization. Here is a highly simplfied example:
>
> Clear[nn];
> Manipulate[n, {n,1,nn,1},
> Initialization:>(nn=RandomInteger[{5,15}];Print[nn])]
>
> This works fine. The slider can be used in the range from 1 to the
> printed value.
>
> However, when nn already has a value, the behaviour is different. When
> we execute
>
> nn=23;
> Manipulate[n, {n,1,nn,1},
> Initialization:>(nn=RandomInteger[{5,15}];Print[nn])]
>
> a value between 5 and 15 for nn is printed, but that value is not used
> in the result; the slider now runs from 1 to 23.
>
> So, whether nn has a value or not, just before the box structure is
> printed, the frontend asks the kernel to evaluate the initialization.
> But the returned value of nn is used in Manipulate only when nn did not
> have a value before. That embarasses me. Any explanation is highly
> apprectiated.
>
> Fred Simons
> Eindhoven University of Technology
>