2008-03-09から1日間の記事一覧

多相的ヴァリアントとデータ構造とパターンマッチ

練習問題を解いたら結構長いコードになった。せっかくなので、記念カキコ。 作って満足してしまった。動作確認はまた今度。 (* 図形を定義 *) type figure = Point | Circle of float | Rectangle of float * float | Square of float;; (* 座標情報をもった…

引き続きOCaml

自然数rについて、x*x + y * y = rを満たす自然数(x, y)のリストを返す関数 ただし、x ≧ y ≧ 0 # let squares r = let isqrt n = int_of_float (sqrt (float_of_int n)) in let y_max = isqrt (r / 2) in let rec get_list y list = if y >= y_max then list…

KコンビネータとSコンビネータ

OCaml勉強中。KコンビネータとSコンビネータが出てきた。 OCamlでfun式と関数適用の組み合わせ「のみ」で表現できる関数はSとKのを関数適用で組み合わせることですべて表現できることが知られています。 # let s x y z = x z (y z);; val s : ('a -> 'b -> '…