haskell-ja > Archives > 2014/08/22

2014/08/22 13:59:38 UTCnobsun
#
リストの同等性検査するプログラムをfold,unfoldを使って書け.というお題がふってきた.
#
書いた
#
eql :: Eq a => ([a],[a]) -> Bool
eql = foldr (&&) True . unfoldr phi
  where
    phi ([],[])   = Nothing
    phi (_:xs,[]) = Just (False,(xs,[]))
    phi ([],_:ys) = Just (False,([],ys))
    phi (x:xs,y:ys) = Just (x==y,(xs,ys))