プログラミング勉強ログ

プログラミングの勉強記録

Yet Another Haskell 3章 (3)

3.3 Lists
リスト(list)に関して

タプルは要素の数が固定されているため、予め要素の数がわからない場合には使えない。

そういうときにはリストを使う。

 

リストはで囲むことで表す。

 ex. [1,2], [1,2,3]

 

リストの要素は1つでもいいし、空でもいい

 ex. [ ], [1]

 

リストの要素は(タプルと違い)全て同じ型でなければならない。

 

:(コロン)を使うことで、リストの先頭に新たな要素を追加したリストを生成することができる。

Prelude> 0:[1,2]
[0,1,2]

 

:はconsオペレータと呼ばれ、consオペレータを使って要素を追加することをconsingと言う。

 

空のリスト([ ])とconsオペレータを使うことで、任意のリストを生成することができる。

Prelude> 5:1:2:3:4:[ ]
[5,1,2,3,4]

(consは右結合っぽい)

 

また、[5,1,2,3,4]という文は、実際には5:1:2:3:4:[ ]という文の糖衣構文である。

 

headとtail関数が定義されており、headはリストの先頭の要素を、tailはリストから先頭の要素を除いた残りのリストを返す。

Prelude> head [1,2,3,4]
1
Prelude> tail [1,2,3,4]
[2,3,4]

Prelude> head [1]
1
Prelude> tail [1]
[ ]

なお、空のリストに対して使うと例外が飛ぶ。

Prelude> head [ ]
*** Exception: Prelude.head: empty list
Prelude> tail
*** Exception: Prelude.tail: empty list

 

length関数を使うことで、リストの長さを取得できる

Prelude> length [1,1,1,1,1]
5