RWH p.92 練習問題 1, 2
-- 1 safeHead :: [a] -> Maybe a safeHead [] = Nothing safeHead (x:_) = Just x safeTail :: [a] -> Maybe [a] safeTail [] = Nothing safeTail (_:xs) = Just xs safeLast :: [a] -> Maybe a safeLast [] = Nothing safeLast xs = Just $ myLast xs safeInit :: [a] -> Maybe [a] safeInit [] = Nothing safeInit xs = Just $ myInit xs -- 2 {- splitWith :: (a -> Bool) -> [a] -> [[a]] splitWith _ [] = [] splitWith f cs = let (pre, suf) = myBreak (not . f) cs in pre: splitWith f (myDropWhile (not . f) suf) -}
1。safeLast
とsafeInit
は空リストでNothing
を返して、空でなければ普通にlast
、init
を呼んだ結果をJust
でラップして返す。
2。Falseを返す要素で切るのでnot . f
か。
2はコメントのid:trad11の指摘にある通り誤り。うーん、しばらくHaskell触ってなかったからコードが読みづらいわー……