On Tue, 12 Apr 2005, Hamilton Richards wrote:

Here's a solution:

  init :: [a] -> [a]
  init xs = tail (foldr keep [] xs)
    where
    keep :: a -> [a] -> [a]
    keep x []  = [x]
    keep x [y] = [x,x]
    keep x (y:z:zs)  = x:x:y:zs

Nice idea!

One case can be eliminated.

init :: [a] -> [a]
init xs = tail (foldr keep [] xs)
  where
    keep :: a -> [a] -> [a]
    keep x []  = [x]
    keep x (_:zs)  = x:x:zs
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to