2006-08-01から1ヶ月間の記事一覧

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とかは書けない。リスト、配列、タプル、レコード、遅延、などの場合は定義できる。詳しくはマニュ…

[OCaml] パターンマッチの順番

OCamlのコンパイラはパターンマッチをおこなう順番を入れ替えている。 リストの場合、 [] -> h :: t -> というパターンマッチがあると、ふたつを入れ替えても[]を先にテストする。optionはNoneを先にテストする。 コンストラクの宣言順は関係あるきがするけ…

細分割曲面

3D

仕事で3Dメッシュを補間して滑らかにする必要があるので調べてみると、再分割曲面(サブディビジョンサーフェイス)という手法を知った。 Catmull-Clarkという手法が有名で、手法は以下。 再分割後の頂点は 1. face point(F): 面の構成する頂点の平均値 2. e…

Leftist Heap

Leftist Heapはヒープに加えて以下の制約が加わったLeftist Treeという構造を持つ。 rank(left child) >= rank(right child) rankとはright spineの長さ(右にだけ降りていったときの最後の接点までの長さ)のことである。 Leftist Treeは要素数nならば rank…

最近バイトでDirectXを触っている。何年か前にDirectXを勉強しようとして 挫折したことがあったけど今回は結構すらすらわかる。 一年前にわからなかったことをいま勉強すると理解できるようになることがあるけど、 その時は自分が成長したなぁと思ってうれし…

C言語風のループ

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

try-with-finally

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