見出し画像

初心者にやさしい言語OCamlでプログラミングを学んでいます(タプルとレコード)

 やさしくても「表現力と安全にこだわった仕事で使える関数型言語」OCamlによるプログラミング学習の第7回です。テキストは、公式ページのあの日のOCamlです。
 内容は、タプルとレコードについてのまとめです。

OCamlのデータ型

 既に見てきたように、OCamlには、整数型などの基本データ型、リストなどの複合型がある。その他のデータ型として、タプルとレコードの二つを以下に説明する。

タプル

 タプルは、要素数が固定された集まりであって、各要素が任意の型をとりうる集まりである。

# let triple = (0, 1.0, '2');;
val triple : int * float * char = (0, 1., '2')

 タプルの値は,で区切られるが、タプルの型は*で区切られる。

レコード

 レコードは、タプルとよく似ているが、タプルが要素の記述を固定された順番で行う代わりに、レコードは名前付きの要素を有する。
 (一体、何と何を対比させようとしているのか分かりませんでした。)

定義
# type employee = { id: int; name: string; is_alive: bool};;
type employee = { id : int; name : string; is_alive : bool; }

# let frank = {id = 4250; name = "frank"; is_alive = true};;
val frank : employee = {id = 4250; name = "frank"; is_alive = true}
要素の読み出し
# let id = frank.id;;
val id : int = 4250

 これらタプルおよびレコードの両方に対して、パターンマッチングが機能する。

# match triple with (x, _, _) -> x;;
- : int = 0
# match frank with {id = i; name = n; is_alive = l} -> i;;
- : int = 4250


まとめ

 今回は、タプルとレコードについて学びました。
 しかし、説明が短いので「今日は名前だけでも憶えて帰って下さいね」といった状態です。
 もしかしたら、OCamlではリストが主役で、タプルやレコードの出番はあまりないのかもしれません。
 次回は、独自定義データ型の予定です。



古往今来得ざれば即ち書き得れば即ち飽くは筆の常也。と云うわけで御座います、この浅ましき乞食めに何卒皆々様のご慈悲をお願い致します。