Re: Programatically creating delayed

• To: mathgroup at smc.vnet.net
• Subject: [mg110241] Re: Programatically creating delayed
• From: Leonid Shifrin <lshifr at gmail.com>
• Date: Thu, 10 Jun 2010 08:07:09 -0400 (EDT)
• References: <201006081106.HAA18787@smc.vnet.net>

```Hi Stuart,

for completeness, let me mention that my function will fail in case when
some of the <aelement[i]> has some value at the moment when we create our
delayed assignment. Observe:

In[1]:=
Table[aelement[i] = i, {i, 3}]

Out[1]= {1, 2, 3}

In[2]:=
Scan[assignElements[#, "element", 3] &, {"a", "b"}]

In[3]:= ?a

Global`a

a:={1,2,3}

This is probably not what you would like. Here is a somewhat more
sophisticated version that is free from this flaw:

Clear[assignElementsFull];
assignElementsFull[name_String, elemName_String, length_Integer] :=
With[{heldName = ToExpression[name, InputForm, Hold]},
Clear @@ heldName;
With[{heldElementBaseName =
ToExpression[name <> elemName, InputForm, Hold]},
Block @@ Append[Map[List, heldElementBaseName],
Unevaluated[
Evaluate[First@heldName] :=
Evaluate[
Table[First[heldElementBaseName][i], {i, length}]]]]]];

For example:

In[6]:=
Clear[a, aelement];
Table[aelement[i] = i, {i, 3}];
assignElementsFull["a", "element", 3]

In[9]:= ?a

Global`a

a:={aelement[1],aelement[2],aelement[3]}

It will work even in this case:

In[10]:=
aelement = 1;

In[11]:= assignElementsFull["a", "element", 3]

In[11]:= ?a

Global`a

a:={aelement[1],aelement[2],aelement[3]}

Regards,
Leonid

On Wed, Jun 9, 2010 at 4:20 AM, Stuart Nettleton <
Stuart.Nettleton at uts.edu.au> wrote:

> Hi Leonid,
> What a wonderful little function!
> Just the thing.
> Many thanks indeed,
> Stuart
>
> --
> UTS CRICOS Provider Code:  00099F
> DISCLAIMER: This email message and any accompanying attachments may contain
> confidential information.  If you are not the intended recipient, do not
> read, use, disseminate, distribute or copy this message or attachments.  If
> you have received this message in error, please notify the sender
> immediately and delete this message. Any views expressed in this message
> are those of the individual sender, except where the sender expressly, and
> with authority, states them to be the views the University of Technology,
> Sydney. Before opening any attachments, please check them for viruses and
> defects.
>
>

```

• Prev by Date: Re: difficulty using FindRoot
• Next by Date: Re: Deleting Duplicates
• Previous by thread: Re: Programatically creating delayed
• Next by thread: Re: Programatically creating delayed