# 99 questions/Solutions/2

### From HaskellWiki

< 99 questions | Solutions(Difference between revisions)

(Add foldl based solution.) |
|||

Line 14: | Line 14: | ||

myButLast'''' = head . tail . reverse | myButLast'''' = head . tail . reverse | ||

+ | |||

+ | myButLast''''' = snd.(foldl (\(a,b) c -> (c,a)) (e1, e2)) | ||

+ | where e1 = error "List too small!" | ||

+ | e2 = error "List is null!" | ||

</haskell> | </haskell> | ||

[[Category:Programming exercise spoilers]] | [[Category:Programming exercise spoilers]] |

## Revision as of 00:12, 11 May 2014

(*) Find the last but one element of a list.

myButLast :: [a] -> a myButLast = last . init myButLast' x = reverse x !! 1 myButLast'' [x,_] = x myButLast'' (_:xs) = myButLast'' xs myButLast''' (x:(_:[])) = x myButLast''' (_:xs) = myButLast''' xs myButLast'''' = head . tail . reverse myButLast''''' = snd.(foldl (\(a,b) c -> (c,a)) (e1, e2)) where e1 = error "List too small!" e2 = error "List is null!"