Re: functional programming excercise from Mastering Mathematica

*To*: mathgroup at smc.vnet.net*Subject*: [mg55290] Re: functional programming excercise from Mastering Mathematica*From*: Peter Pein <petsie at arcor.de>*Date*: Fri, 18 Mar 2005 05:34:18 -0500 (EST)*References*: <d1bflp$lja$1@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

Torsten Coym wrote: > I'm quite new to Mathematica and its functional programming capabilities > so I did some reading in John Gray's "Mastering Mathematica". There is > an excercise in chapter 6 as follows > > Write your own function composeList that works just like the built-in > operation with the same name, using FoldList. Conversely, write your own > function foldList that works just like the built-in operation with the > same name, using ComposeList. > > Unfortunately, there is no solution given at the end of the book (or I > didn't find it). I could figure out a way to do the first task: > > composeList[funlist_List, var_] := FoldList[(#2[#1]) &, var, funlist] > > but I can't manage the second task... > > I know it's rather academic, but ... any help is welcome! > > Torsten > foldList[f_, x_, {}] := {x}; foldList[f_, x_, lst_List] := {x, Sequence @@ foldList[f, f[x, First[lst]], Rest[lst]]}; foldList[f, x, {a, b, c}] == FoldList[f, x, {a, b, c}] ==> True If you need to handle large Lists (length > 250), you'll reach the recursion limit. You could try the procedural approach Clear@foldList; foldList[f_, x_, lst_] := Module[{n = Length[lst], r}, For[i = 1; r = Table[x, {n + 1}], i <= n, i++, r[[i + 1]] = f[ r[[i]], lst[[i]] ] ]; r]; or even better the builtin FoldList ;-) -- Peter Pein Berlin