map :: (a -> b) -> [a] -> [b]
map _ [] = []
map f (x:xs) = f x : map f xs
- (a -> b) なる関数(任意の型aの値を型bの値に移す関数)と[a](型aの値のリスト)とから、[b](型bの値のリスト)を返す
- ([a]が空のリスト)ならを返す
- (x:xs)(リストの先頭要素とそれ以外に分ける)に対して、先頭要素には関数fを、残りのリストには同じ処理を施すという再帰的定義をする
(++) :: [a] -> [a] -> [a]
(++) [] ys = ys
(++) (x:xs) ys = x : xs ++ ys
- [a] -> [a] (同じ値の型を持つ2つのリスト)を引数として、同じ値の型を持つ1つのリストを返す
- 第1引数が[](空のリスト)のときと、そうでないときに処理を分ける
- 第1引数が空でないときは、その先頭要素から順に対象とした再帰的定義をする
filter :: (a -> Bool) -> [a] -> [a]
filter _pred [] = []
filter pred (x:xs)
| pred x = x : filter pred xs
| otherwise = filter pred xs
- (a -> Bool) (真偽を判断する関数)と[a](リスト)を引数に[a](リスト)を返す
- 空リストなら空リストを返す
- (x:xs)先頭の要素から順に対象とした再帰的定義をする
- [y | y <- [1,2,3,4], y<3]というのような内包表現のというリストと[tex:
- "pred"は"predicate(述部)
(!!) :: [a] -> Int -> a
#ifdef USE_REPORT_PRELUDE
xs !! n | n < 0 = error "Prelude.!!: negative index"
[] !! _ = error "Prelude.!!: index too large"
(x:_) !! 0 = x
(_:xs) !! n = xs !! (n-1)