読者です 読者をやめる 読者になる 読者になる

Haskell を使ってみる 2 (リストの操作)

Haskell

前回の続き

Haskell を使ってみる on Mac - kntmr-blog

リスト

リスト同士の連結

Prelude> [1,2,3] ++ [7,8,9] -- 2つのリストを引数に取る
[1,2,3,7,8,9]
Prelude> "Hello" ++ " " ++ "World!" -- 文字列はリストと同じ
"Hello World!"

リストの先頭に要素を追加

Prelude> 4 : [1,2,3] -- 追加するリストの要素と同じ型の要素を第1引数に取る
[4,1,2,3]
Prelude> 'x' : "yz"
"xyz"

リストの要素にアクセス

Prelude> [1,2,3,4,5] !! 1
2
Prelude> "abcdefg" !! 2
'c'

リストの比較

Prelude> [1,2,3] < [1,2,4] -- 先頭の要素から辞書順に比較される
True
Prelude> ['a','b','x'] < ['a','b','c']
False

その他のリスト操作

Prelude> head [1,2,3,4,5]
1
Prelude> head "abc"
'a'
Prelude> tail [7,8,9] -- 先頭の要素を除いたリスト
[8,9]
Prelude> tail "hoge"
"oge"
Prelude> last [7,8,9]
9
Prelude> last "hoge"
'e'
Prelude> init [1,2,3,4,5] -- 末尾の要素を除いたリスト
[1,2,3,4]
Prelude> init "Hello"
"Hell"

head, tail, last, init は空のリストには使えない

Prelude> length [1,2,3,4,5,6,7,8,9]
9
Prelude> length "Hello"
5
Prelude> null [1,2] -- リストが空かどうか
False
Prelude> null []
True
Prelude> null "hoge"
False
Prelude> null ""
True
Prelude> reverse [5,4,3,2,1] -- リストの逆順
[1,2,3,4,5]
Prelude> reverse "xyz"
"zyx"
Prelude> take 2 [1,2,3,4,5] -- 指定された数の要素を取り出したリスト
[1,2]
Prelude> take 2 "fuga"
"fu"
Prelude> drop 2 [1,2,3] -- 指定された数の要素を除いたリスト
[3]
Prelude> drop 2 "Hello"
"llo"
Prelude> maximum [4,2,6,9,3,5]
9
Prelude> maximum "abcxyz" -- 辞書順で最も大きい要素
'z'
Prelude> minimum [6,1,5,9,4,3]
1
Prelude> minimum "abcxyz" -- 辞書順で最も小さい要素
'a'
Prelude> sum [2,4,6] -- 要素の和
12
Prelude> product [2,4,6] -- 要素の積
48
Prelude> elem 2 [1,2,3] -- 指定された要素がリストに含まれているか
True
Prelude> elem 2 [7,8,9]
False
Prelude> elem 'e' "hoge"
True
Prelude> elem 'e' "fuga"
False

elem は中置関数として使うと読みやすい

Prelude> 2 `elem` [4,6,2,7,8]
True

今回はリストの操作まで。