OCaml

パターンの合成

こんな書き方ができたのか let f = function Some (0 | 1) -> true | _ -> false

Private types

型の値の生成を禁止する場合に使う。型の値の生成を禁止するだけなので、値を取り出したり、 パターンマッチしたりはできる。 ほとんどの場合、モジュールのシグネクチャで使うことになる。 private typeはvariantかレコードに対して指定できる。

Recursive definitions of values

関数の再帰は良くやるけど、値に対しても再帰を使って定義できる。 #let rec a = 1 :: 2 :: a val a : int list = [1; 2; 1; 2;1 ;2 ... ]let rec a = a + 1とかは書けない。リスト、配列、タプル、レコード、遅延、などの場合は定義できる。詳しくはマニュ…

C言語風のループ

OCamlの標準のforループは指定回数だけループする機能しかない。ループは再帰で書けということだと思うけど、そういう再帰関数の中には副作用を持つ操作をなるべく含めたくなし、breakするにも書きにくい。 そこで、C言語風のforループを書ける構文拡張を作…

try-with-finally

camp4が使えるようになりたいと思っていたので 向井さんの訳された http://www.jmuk.org/~mukai/camlp4tut.html を読ませてもらう。はじめはよくわからないけど、読み進めていくうちになんとかわかってきた。そこで、p4ckで配布されているpa_tryfinally.mlを…