13.9 練習問題
- 付録Aにある標準ライブラリの中から重複のあるパターンを使って定義されている関数を探せ。
教科書を見ながら抜き出してみる。 ガードも重複パターンのうちかな?
A.1 クラス
min, max :: a -> a -> a min x y | x <= y = x | otherwise = y max x y | x <= y = y | otherwise = x
A.2 真理値
特になし
A.3 文字
toLower :: Char -> Char toLower c | isUpper c = chr (ord c - ord 'A' + ord 'a') | otherwise = c toUpper :: Char -> Char toUpper c | isLower c = chr (ord c - ord 'a' + ord 'A') | otherwise = c
A.4 数値
特になし。累乗は多分重複のないパターン。
A.5 タプル
特になし
A.6 Maybe
特になし
A.7 リスト
last :: [a] -> a last [x] = x last (_:xs) = last xs takeWhile :: (a -> Bool) -> [a] -> [a] takeWhile _ [] = [] takeWhile p (x:xs) | p x = x:takeWhile p xs | otherwise = [] init :: [a] -> [a] init [_] = [] init (x:xs) = x:init xs dropWhile :: (a -> Bool) -> [a] -> [a] dropWhile _ [] = [] dropWhile p (x:xs) | p x = dropWhile p xs | otherwise = x:xs foldr1 :: (a -> a -> a) -> [a] -> a foldr1 _ [x] = x fildr1 f (x:xs) = f x (foldr1 f xs) zip :: [a] -> [b] -> [(a,b)] zip [] _ = [] zip _ [] = [] zip (x:xs) (y:ys) = (x,y):zip xs ys
A.8 関数
特になし
A.9 入出力
特になし