Felipe Lessa wrote:
apfelmus wrote:
Of course, the solution is to first drop n elements and then take
tails instead of dropping n elements every time.
map (drop n) . tails = tails . drop n
O(m*n) O(m)
Nice identity. I'll remember this one.
Oops, please don't because it's wrong :)
Data.List> let xs = [1..3]
Data.List> map (drop 2) . tails $ xs
[[3],[],[],[]]
Data.List> tails . drop 2 $ xs
[[3],[]]
The first one produces some extra empty lists at the end. In other
words, the left hand side and the right hand side have different lengths
length . map (drop n) . tails = (+1) . length
but
length . tails . drop n = (\k -> 1 + max 0 (k-n)) . length
But the wrong version looks much nicer :)
Thanks for your great postings, apfelmus.
λ(^_^)λ
Regards,
apfelmus
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe