
I'll bite. The source of tails is pretty elegant:
tails :: [a] -> [[a]]tails [] =
[[]]tails xxs@(_:xs) = xxs : tails xs
On Mon, Jun 27, 2011 at 1:30 PM, Costello, Roger L.
Hi Folks,
Below is a divide-and-conquer implementation of the "tails" function.
Notice the two patterns (x:y:xs) and (x:[]). And notice that (x:y:xs) is used by the "length" function and again by the "splitAt" function. That doesn't seem elegant. Can the function be simplified and made beautiful?
/Roger
tails' :: [a] -> [[a]] tails' (x:y:xs) = map (++zs) (tails' ys) ++ tails' zs where m = length (x:y:xs) n = m `div` 2 (ys,zs) = splitAt n (x:y:xs) tails' (x:[]) = [[x]]
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
-- Michael Xavier http://www.michaelxavier.net