読者です 読者をやめる 読者になる 読者になる

OCamlのコンストラクタ

 OCamlコンストラクタがよくわからない。オブジェクト指向言語ばかりやってた私にとっては(と言ってもC#とかVB.NETだけど)コンストラクタというのはクラスからインスタンスを作るときに呼び出されるメソッドのことなんだけど、関数型のこの子にとっては違うらしい。だからわからないというわけではないのだけど、微妙だなぁと思っていろいろ調べていた。
 一口に言えばOcamlコンストラクタは「ラベル・タグ」なのだと思う(今スライド見たらそう書いてあったし)。んでofでその型の中身を記述する。でもってヴァリアント型というのはC系の言語における構造体(struct,structure)の1要素バージョンなのであって、Objective Caml 入門のChapter6で説明されていることそのままだった。そもそも私がCのunionを知らなかったのが悪い。あと、C++11で覚醒した共用体の話 — 京大マイコンクラブ (KMC)にあるように、「構造体は各メンバの情報をメモリ上に順に並べて保持」して、「共用体は各メンバの情報をメモリ上の同じ位置に重なるようにして保持」する。これがそのままOCamlにおけるレコードとヴァリアントに相当している。
 よくみるとこれも演習のスライドに書いてあった。だめじゃん。ちゃんと読もう。理解できたのでよかったです。何も説明せずにラムダ計算の記述させるのかーと思ったのだけど、そこまで変なことやってなかった。