99 questions/Solutions/5
< 99 questions | Solutions
Jump to navigation
Jump to search
Revision as of 19:52, 18 January 2014 by Henk-Jan van Tuyl (talk | contribs) (Added Category:Programming exercise spoilers)
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
(*) Reverse a list.
reverse :: [a] -> [a]
reverse = foldl (flip (:)) []
The standard definition, found in the prelude, is concise, but not very readable. Another way to define reverse is:
reverse :: [a] -> [a]
reverse [] = []
reverse (x:xs) = reverse xs ++ [x]
However this definition is more wasteful than the one in Prelude as it repeatedly reconses the result as it is accumulated. The following variation avoids that, and thus computationally closer to the Prelude version.
reverse :: [a] -> [a]
reverse list = reverse' list []
where
reverse' [] reversed = reversed
reverse' (x:xs) reversed = reverse' xs (x:reversed)