\$\begingroup\$
\$\endgroup\$
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
asked Oct 17, 2014 at 1:07
1 Answer 1
\$\begingroup\$
\$\endgroup\$
2
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'
answered Oct 17, 2014 at 1:19
-
\$\begingroup\$ Thank you for your continued help on most/all of my recent questions. \$\endgroup\$Kevin Meredith– Kevin Meredith2014年10月17日 01:21:04 +00:00Commented Oct 17, 2014 at 1:21
-
\$\begingroup\$ @KevinMeredith my pleasure. I thoroughly enjoyed the previous one (Streams) in particular :) \$\endgroup\$mjolka– mjolka2014年10月17日 01:22:28 +00:00Commented Oct 17, 2014 at 1:22
lang-hs