[Haskell-beginners] Creating beautiful code: can you make this divide-and-conquer implementation of the "tails" function beautiful?
nemesisdesign at gmail.com
Tue Jun 28 03:16:53 CEST 2011
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. <costello at mitre.org>wrote:
> 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?
> 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 at haskell.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Beginners