定義
Haskellのリストは要素をカンマ区切りで並べ大括弧で囲む。
同じ型の要素しか格納できない。
haskell> [1, 2, 3] [1,2,3]
ネスト
リストの中にリストを定義することができる。
haskell> [[1, 2], [3]] [[1,2],[3]]
次元は揃える必要がある。エラーとなる。
haskell> [[1, 2], [3], 4] <interactive>:179:1: error: • Non type-variable argument in the constraint: Num [a] (Use FlexibleContexts to permit this) • When checking the inferred type it :: forall a. (Num [a], Num a) => [[a]]
rangeを使用した生成
haskell> [1..10] [1,2,3,4,5,6,7,8,9,10] haskell> ['a'..'z'] "abcdefghijklmnopqrstuvwxyz"
ステップを指定すると2の倍数のみなどを生成できる。
haskell> [2,4..20] [2,4,6,8,10,12,14,16,18,20] haskell> [3,6..20] [3,6,9,12,15,18]
減少するリストも生成が可能。
haskell> [20,18..2] [20,18,16,14,12,10,8,6,4,2]
結合
++演算子
で結合できる。
haskell> [1, 2, 3] ++ [4, 5, 6] [1,2,3,4,5,6] haskell> ['a', 'b'] ++ ['c'] "abc"
先頭に追加
:演算子
*1 で追加できる。
haskell> 0 : [1, 2, 3] [0,1,2,3]
要素へのアクセス
要素番号指定
!!演算子
で要素番号を指定してアクセスできる。
haskell> [1, 2, 3] !! 0 1 haskell> [1, 2, 3] !! 2 3
先頭の要素
head関数
を使用する。
haskell> head [1, 2, 3] 1
末尾の要素
tail関数
を使用する。
haskell> last [1, 2, 3] 3
先頭以外の要素
tail関数
を使用する。
haskell> tail [1, 2, 3] [2,3]
末尾以外の要素
init関数
を使用する。
haskell> init [1, 2, 3] [1,2]
先頭から指定した数の要素
take関数
を使用する。
haskell> take 2 [1, 2, 3] [1,2] haskell> take 1 [1, 2, 3] [1] haskell> take 0 [1, 2, 3] []
先頭から指定した数の要素を除外した要素
drop関数
を使用する。
haskell> drop 1 [1, 2, 3] [2,3] haskell> drop 0 [1, 2, 3] [1,2,3] haskell> drop 3 [1, 2, 3] []
比較
<
>
<=
>=
==
を使用して辞書順で比較する。
要素ごとに比較し、条件に一致した時点で比較が決まる。
要素数が合わない場合も比較できる。
haskell> [1, 2, 3] < [2, 3, 4] True haskell> [9] > [1, 3] True
Javaには無い機能。使いどころが不明。
長さ
length関数
を使用する。
haskell> length [1, 2, 3] 3
空判定
null関数
を使用する。
haskell> null [] True haskell> null [1, 2, 3] False
最大値
maximum関数
を使用する。
haskell> maximum [5, 2, 1, 6, 9] 9
最小値
minimum関数
を使用する。
haskell> minimum [5, 2, 1, 6, 9] 1
要素の和
sum関数
を使用する。
haskell> sum [1, 2, 3] 6
要素の積
product関数
を使用する。
haskell> product [1, 2, 3] 6 haskell> product [1, 2, 3, 4] 24
要素の存在確認
elem関数
を使用する。
haskell> elem 2 [1, 2, 3] True haskell> elem 5 [1, 2, 3] False