Re: composing functions

*To*: mathgroup at smc.vnet.net*Subject*: [mg45544] Re: [mg45527] composing functions*From*: Andrzej Kozlowski <akoz at mimuw.edu.pl>*Date*: Tue, 13 Jan 2004 04:03:58 -0500 (EST)*References*: <200401120715.CAA29367@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

On 12 Jan 2004, at 07:15, Pedro L 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? > > > > > One possible way: ListCompose[l_List, k_List] := Module[{F = l}, Fold[First[F = RotateRight[F]][#1, #2] & , First[k], Rest[k]]] Now: ListCompose[{h, g, f}, {a, b, c, d}] Out[2]= h[g[f[a, b], c], d] ListCompose[{h, g, f, k}, {a, b, c, d, e}] h[g[f[k[a, b], c], d], e] etc. Andrzej Kozlowski Chiba, Japan http://www.mimuw.edu.pl/~akoz/

**References**:**composing functions***From:*Pedro L <pedrito6@softhome.net>