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を修正。