Re: rhs of SetDelayed
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg1657] Re: [mg1584] rhs of SetDelayed
- From: Allan Hayes <hay%haystack at christensen.cybernetics.net>
- Date: Tue, 11 Jul 1995 01:57:11 -0400
In [mg1584] rhs of SetDelayed
Michael Probst <c7081naa at c1.cc.univie.ac.at>
Wrote
>I have to define a few functions that take the same arguments.
>Therefore I don't want to write the list of agguments repeatedly
>and use a variable instead.
>The following approach:
>
>lhsArg={a1_,a2_,a3_,a4_};
>rhrArg={a1,a2,a3,a4};
>f[lhsArg]:=g[rhsArg];
>
>does not work. The left side is o.k. but since rhsArg is not
>converted to {a1,a2,a3,a4} the right side is not.
>How does one do this ?
Michael,
The following, using With, may help: I give two variants.
Clear[f,lhsArg,rhsArg,a1,a2,a3,a4]
{a1, a2, a3, a4} = {1, 2, 3, 4};
(*to check there is no unwanted evaluation *)
With[{lhsArg ={a1_,a2_,a3_,a4_},rhsArg:={a1,a2,a3,a4}},
f[lhsArg]:= g[rhsArg]];
With[{lhsArg = Sequence[a1_,a2_,a3_,a4_],
rhsArg:= Sequence[a1,a2,a3,a4]
},
f[lhsArg]:= g[rhsArg]
];
?f
Global`f
f[{a1_, a2_, a3_, a4_}] := g[{a1, a2, a3, a4}]
f[a1_, a2_, a3_, a4_] := g[a1, a2, a3, a4]
Notice the use of := in With to simply insert unevaluated.
Compare
Clear[f];
With[{lhsArg ={a1_,a2_,a3_,a4_},rhsArg ={a1,a2,a3,a4}},
f[lhsArg]:= g[rhsArg];]
?f
Global`f
f[{a1_, a2_, a3_, a4_}] := g[{1, 2, 3, 4}]
g will never be evaluated.
Allan Hayes
hay at haystack.demon.co.uk