Difference between revisions of "99 questions/Solutions/5"

From HaskellWiki
Jump to: navigation, search
m (Added foldr solution)
Line 24: Line 24:
 
</haskell>
 
</haskell>
   
  +
And my favorite, although the most unreadable for sure :)
  +
  +
<haskell>
  +
myReverse'' :: [a] -> [a]
  +
myReverse'' xs = foldr (\x fId empty -> fId (x : empty)) id xs []
   
 
[[Category:Programming exercise spoilers]]
 
[[Category:Programming exercise spoilers]]

Revision as of 15:46, 18 December 2014

(*) 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)

And my favorite, although the most unreadable for sure :)

<haskell> myReverse :: [a] -> [a] myReverse xs = foldr (\x fId empty -> fId (x : empty)) id xs []