Re: Generate expression from result
- To: mathgroup at smc.vnet.net
- Subject: [mg32861] Re: Generate expression from result
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Sat, 16 Feb 2002 04:35:17 -0500 (EST)
- References: <a4aum0$bug$1@smc.vnet.net> <a4fnvu$j4j$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Johanes, Albert,
An addition to Albert's posting.
Module only directly affects free variables.
In Johnes' example,
Module[{a1, a2, f}, f[{a1_, a2_}] = LinearSolve[m[{a1, a2}], b[{a1, a2}]]]
a1 in a1_ is bound to the a1's in m[{a1, a2}], b[{a1, a2}], similarly for
a2.
However there can be indirect effects on bound variables because of of the
need to preserve their formal nature:
Module[{b},f[a_]:={a,b};
Print[DownValues[f]]
]
{HoldPattern[f[a$_]]:>{a$,b$31}}
Here, Module changed b and this provoked a change in the a's.
--
Allan
---------------------
Allan Hayes
Mathematica Training and Consulting
Leicester UK
www.haystack.demon.co.uk
hay at haystack.demon.co.uk
Voice: +44 (0)116 271 4198
Fax: +44 (0)870 164 0565
"Albert Retey" <albert.retey at visualanalysis.com> wrote in message
news:a4fnvu$j4j$1 at smc.vnet.net...
> Johannes Ludsteck wrote:
> >
> > Dear Mathgroup Members,
> > I obtain the vector {x1,x2} as solution to a
> > (rather complicated) equation system
> >
> > {x1,x2}=LinearSolve[m[{a1,a2}],b[{a1,a2}]]
> > Of course, the xi are functions of {a1,a2}.
> >
> > Since I use the xi later on for complex operations,
> > it would be of gread help if the arguments ai appeared
> > in the vector {x1,x2}.
> > Therefore I defined
> > f[{a1_,a2_}]=LinearSolve[m[{a1,a2}],b[{a1,a2}]]
> >
> > (I need "=" here instead of ":=", since f[] is called
> > often and the LinearSolve[] command uses some time,
> > since the vectors {x1,x2} and {a1,a2} are only
> > examples and can have dimension 10 to 20 in my application.
> >
> > Up to now the solution works well, but I am bothering
> > whether this construction could generate modularity or
> > naming problems, since the Assignment
> > appears in a Module where {a1,a2} are defined as local variables.
> >
> > fun[...]:=Module[{a1,a2,f},
> > ...
> > f[{a1_,a2_}]=LinearSolve[m[{a1,a2}],b[{a1,a2}]]
> > ...
> > ]
> >
> I think they are save, as you can see when evaluating the following.
>
> Module[{a1, a2, f}, f[{a1_, a2_}] = LinearSolve[m[{a1, a2}], b[{a1,
> a2}]];
> Print[DownValues[f]];
> Print[a1];
> Print[a2];
> ]
>
> If things get more complicated I don't know, but why not just use
> different names for the f-pattern to be on the save side?
>
> HTH
>
> Albert
>