リスト
リストの構造
リスト=同じ型のデータが任意の数並んだデータ
※レコードは、複数のデータが決められた個数だけ並ぶ。
空のリスト
Ocamlでは空のリストはで表現する。(要素が0個のリスト)
空のリストに要素を加えるには
追加する要素 :: []
と書く。
(* 曜日のリスト *) "Mon" :: "Tue" :: "Wed" :: "Thu" :: "Fri" :: "Sat" :: "Sun" :: []
は
("Mon" :: ("Tue" :: ("Wed" :: ("Thu" :: ("Fri" :: ("Sat" :: ("Sun" :: [])))))))
の様に評価される。
常に「要素 :: リスト」の関係になり、これ自身もリストということになる。
リストの様に、リストを定義する際にそのリスト自身を使って定義するデータ型を
再帰的なデータ型、自己参照をするデータ型という。
リストの構文
空のリストは"[]"、リストに要素を追加するには"::"を使ったが
リストを作る場合、以下の様にも書ける。
[1, 2, 3]
これは
1 :: 2 :: 3 :: []
と書くのと全く同じ意味になる。
リストの型
リスト内の要素は全て同じ型にしなければいけない。
※リストの用途としては、同じ処理を大量の似たデータに対して行う場合に使用する。
リストは変数として定義して使用することも出来る。
# let lst = [1 ; 2 ; 3 ; 5 ] ;; val lst : int list = [1; 2; 3; 5]
パターンマッチ
組、レコードと同様にパターンマッチでリストの要素にアクセスする。
リストの場合、要素数が決まっていないためパターンを複数書くことができる。
# match [1 ; 2 ; 3] with [] -> 0 | first :: rest -> first ;; - : int = 1
は、リスト[1 ; 2 ; 3]に対して
- 空リストなら0を返す
- 1 :: [2 ; 3]というパターンにマッチしたら先頭要素の1を返す。
※match文では、空かそうでないかの両方を書かないと警告が出る。