4
\$\begingroup\$

I wrote the following suffixes function. Given a list, it returns the list + all sub-lists.

suffixes [1,2,3,4] == [[1,2,3,4], [2,3,4], [3,4], [4], []]

Please critique my implementation.

suffixes :: [a] -> [[a]]
suffixes []         = [] : []
suffixes xxs@(_:xs) = xxs : suffixes xs
\$\endgroup\$
6
\$\begingroup\$

Looks good to me. The only thing I would change is

suffixes [] = [] : []

to

suffixes [] = [[]]

as it's a bit more readable.

When re-inventing functions, it can be instructive to look up their definition using Hoogle. Following the links, we find this definition in Data.List:

tails                   :: [a] -> [[a]]
tails xs                =  xs : case xs of
                                  []      -> []
                                  _ : xs' -> tails xs'
\$\endgroup\$
2
  • \$\begingroup\$ Thank you for your continued help on most/all of my recent questions. \$\endgroup\$ – Kevin Meredith Oct 17 '14 at 1:21
  • \$\begingroup\$ @KevinMeredith my pleasure. I thoroughly enjoyed the previous one (Streams) in particular :) \$\endgroup\$ – mjolka Oct 17 '14 at 1:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.