
On 11/23/08 13:52, Luke Palmer wrote:
2008/11/23 Larry Evans
: http://www.muitovar.com/monad/moncow.xhtml#list
contains a cross function which calculates the cross product of two lists. That attached does the same but then used cross on 3 lists. Naturally, I thought use of fold could generalize that to n lists; however, I'm getting error:
You should try writing this yourself, it would be a good exercise. To begin with, you can mimic the structure of cross in that tutorial, but make it recursive. After you have a recursive version, you might try switching to fold or foldM.
Thanks. The recursive method worked with: -{--cross.hs-- crossr::[[a]] -> [[a]] crossr lls = case lls of { [] -> [] ; [hd] -> map return hd ; hd:tail -> concat (map (\h ->map (\t -> h:t) (crossr tail)) hd) } -}--cross.hs-- However, I'm not sure fold will work because fold (or rather foldr1) from: http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#12 has signature: (a->a->a)->[a]->a and in the cross product case, a is [a1]; so, the signature would be ([a1]->[a1]->[a1]->[[a1]]->[a1] but what's needed as the final result is [[a1]]. Am I missing something? -Larry