[Haskell-beginners] Creating beautiful code: can you make this divide-and-conquer implementation of the "tails" function beautiful?

Michael Xavier 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?
>
> /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 at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>



-- 
Michael Xavier
http://www.michaelxavier.net
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20110627/8137cf3f/attachment.htm>


More information about the Beginners mailing list