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.
>
>
- References:
- Programatically creating delayed assignment
- From: "Stuart Nettleton" <Stuart.Nettleton@uts.edu.au>
- Programatically creating delayed assignment