RWH 4.5.6 リストの探索
myElem :: (Eq a) => a -> [a] -> Bool myElem _ [] = False myElem e (x:xs) | e == x = True | otherwise = myElem e xs myNotElem :: (Eq a) => a -> [a] -> Bool myNotElem e = not . myElem e myFilter :: (a -> Bool) -> [a] -> [a] myFilter _ [] = [] myFilter f (x:xs) | f x == True = x:(myFilter f xs) | otherwise = myFilter f xs myIsPrefixOf :: (Eq a) => [a] -> [a] -> Bool myIsPrefixOf _ [] = False myIsPrefixOf [] _ = True myIsPrefixOf (x:xs) (y:ys) | x == y = myIsPrefixOf xs ys | otherwise = False myIsInfixOf :: (Eq a) => [a] -> [a] -> Bool myIsInfixOf _ [] = False myIsInfixOf [] _ = True myIsInfixOf x'@(x:xs) y'@(y:ys) | x == y = myIsPrefixOf x' y' || myIsInfixOf x' ys | otherwise = myIsInfixOf x' ys myIsSuffixOf :: (Eq a) => [a] -> [a] -> Bool myIsSuffixOf x y = myIsPrefixOf (myReverse x) (myReverse y)
myIsSuffixOf
は無限リスト渡したら帰ってこないけどいいよね。末尾ないし。
追記 22:25
myIsInfixOf
, myIsPrefixOf
を修正。