Re: Mapping of mapping functions in metadefinitons
- To: mathgroup at smc.vnet.net
- Subject: [mg21997] Re: [mg21981] Mapping of mapping functions in metadefinitons
- From: Hartmut Wolf <hwolf at debis.com>
- Date: Thu, 10 Feb 2000 02:25:39 -0500 (EST)
- Organization: debis Systemhaus
- References: <200002071802.NAA08395@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Roland Franzius schrieb:
>
> I have a problem in using metafunctions defining groups of
> other functions. Having a group f={f1,f2,f3} of vector
> functions I may define the functor bs=
> SetDelayed[#[a_vector,b_vector] , Inner[Times,a,b,#]]& and
> apply it as Map[bs,f].
> To generate the function behaviour for
> numbers and vectors like
> f1[a_Integer,b_vector]:=Map[f1[a,#]&,b] I seek a possibilty to
> use a functor fs=SetDelayed[#[a_Integer,b_vector],
> Map[Function[x,Times[a,x],b]]& to use it as Map[fs,f].
> Any
> suggestions using Through, Thread, Scan, Hold? Or have I togo
> back compiling string and execute them?
>
Dear Roland,
to me it's not clear what you want to attain. So I need to stick to the
literal. Let me take your simpler example first. Suppose you want to
have functions like
In[1]:= f1[a_Integer, b_?VectorQ] := Map[f1[a #] &, b]
In[2]:= f1[777, {b1, b2}]
Out[2]=
{f1[777 b1], f1[777 b2]}
Now, if you have a vector of symbols
In[4]:= f = {f1, f2, f3}
you may give them all this property with
In[8]:=
fs = Function[f, f[a_Integer, b_?VectorQ] := (f[a #] &) /@ b ];
In[9]:= fs /@ f
Out[9]= {Null, Null, Null}
and then you have
In[10]:= Through[f[666, {b1, b2}]]
Out[10]=
{{f1[666 b1], f1[666 b2]}, {f2[666 b1], f2[666 b2]}, {f3[666 b1], f3[666
b2]}}
So every "function" f<i> now has this property.
Now for your other case
In[20]:= Clear[f1, f2, f3]
In[22]:=
f1[a_?VectorQ, b_?VectorQ] := Inner[Times, a, b, f1]
In[23]:= f1[{a1, a2}, {b1, b2}]
Out[23]= f1[a1 b1, a2 b2]
If that is it what you want for all your f<i>, you can attain it simply
through the same means:
In[26]:=
bs = ((#[a_?VectorQ, b_?VectorQ] := Inner[Times, a, b, #]) &);
In[27]:= bs /@ f
Out[27]= {Null, Null, Null}
In[28]:= Through[f[{a1, a2}, {b1, b2}]]
Out[28]=
{f1[a1 b1, a2 b2], f2[a1 b1, a2 b2], f3[a1 b1, a2 b2]}
There is no need for Hold etc. in these cases. But none of your symbols
(for "functions") must have OwnValues. In that case you'd get $Failed
instead of Null when applying your "functors" (I'd not call them such),
so Clear them beforehand.
Kind regards, Hartmut
- References:
- Mapping of mapping functions in metadefinitons
- From: Roland Franzius <Roland.Franzius@uos.de>
- Mapping of mapping functions in metadefinitons