プログラミングの基礎 第 8 章 レコード

今回はレコードの話。

8.2 レコードの構文

注意。

# {namae = "asai"; tensuu = 70; seiseki = "B"}::
- : gakusei_t = {namae = "asai"; tensuu = 70; seiseki = "B"}

という例が最初に示されているけど、以下のように先に型の定義をしないとエラーが出るみたい。

# type gakusei_t = {name:string; score:int; grades:string};;
type gakusei_t = { name : string; score : int; grades : string; }
# {name = "asai"; score = 70; grades = "B"};;
- : gakusei_t = {name = "asai"; score = 70; grades = "B"}

本文中でも書いてあったんだけど、見落としてた。
どう書いても実行出来ないからおかしいなーと思ったら 8.5 節で型の定義はやるのね。
先に型定義の構文をやって欲しかったな。

8.3 レコードとパターンマッチ

タプル*1の場合とほぼ一緒。
パターン変数の決め方だけが違って、タプルの場合は構造的に?パターン変数の名前の割り当てが決まるけど、レコードは自分でフィールドにパターン変数の名前を決める。

8.4 そのほかの記法
  • フィールド名とパターン変数名は同じでも良い
  • パターン変数ではフィールドを省略出来る
  • 「レコード . フィールド」という書き方でも値は取り出せる( C の構造体みたいな感じ )
8.5 ユーザーによる型定義

型定義の例。

type gakusei_t = {
  name : string;
  score : int;
  grades : string;
};;

最後のフィールドの後のセミコロンは省略出来るみたい。
フィールド名の重複は不可。


まだ途中だけど今日はここまで。

*1:少年オッカムルの第五話で学んだ言葉!