Re: composing functions
- To: mathgroup at smc.vnet.net
- Subject: [mg45539] Re: [mg45527] composing functions
- From: Richard Palmer <mapsinc at bellatlantic.net>
- Date: Tue, 13 Jan 2004 04:03:54 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
On 1/12/04 2:15 AM, "Pedro L" <pedrito6 at softhome.net> wrote:
> Hi!
>
> I would like to find a way for composing a list of functions over a
> list of numbers.
>
> I have the list {{f, g, h}, {a, b, c, d}}
> (f, g, h are functions and a, b, c, d are numbers)
> I would like to obtain h[g[f[a, b], c], d]
>
> Since it's for a real program, I had to do it in "any" way. So I did
> it as I show below:
>
>
> In[1]:= kk = {{f, g, h}, {a, b, c, d}}
>
> Out[1]= {{f, g, h}, {a, b, c, d}}
>
> In[2]:= result1 = {kk[[2,1]]}; For[i = 1, i < Length[kk[[2]]], i++,
> AppendTo[result1, kk[[1,i]]];
> AppendTo[result1, kk[[2,i + 1]]]]; result1
>
> Out[2]= {a, f, b, g, c, h, d}
>
> In[3]:= result2 = StringJoin @@ ToString /@ result1
>
> Out[3]= afbgchd
>
> In[4]:= result3 = StringInsert[result2, "~", Range[2, StringLength[result2]]]
>
> Out[4]= a~f~b~g~c~h~d
>
> In[5]:= result4 = ToExpression[result3]
>
> Out[5]= h[g[f[a, b], c], d]
>
>
>
>
> But I'm really sure that it can be done much better.
>
> Could you help me?
>
>
>
Try the following code for a recursive solution.
L={{f1,f2,f3},{a1,a2,a3,a4}}
q[{{f_}, {g_, h_}}] = f[g, h];
q[{{f_, ff__}, {g_, h_, i__}}] :=
q[{{ff}, {f[g, h], i}}];
q[l]