OCaml

LablGTK で遊ぶ

LablGTK(http://wwwfun.kurims.kyoto-u.ac.jp/soft/lsl/lablgtk.html) は、OCaml のための GUI ライブラリです。素敵です。 背景 研究のためにサンプルプログラムを書く必要があった マルチスレッドと GUI のライブラリが必要だった Haskell + wxHaskell で…

Brainfuck インタプリタ

寝る前に OCaml でなんか書いてみるか、と思って書いてみた。 exception Unexpected_char let interpret str = (* バッファ *) let buf = Array.create 3000 0 in (* 対応する右括弧(])を探しに行く *) let rec rp idx n = match String.get str idx with | …

OCaml サブセット インタプリタ

とりあえず適当に動くようになった。Scheme と違うのはカリー化ができるところと、中置演算子とか結合の優先度とかがあること。

やっぱり Gauche はすごい

OCaml のソースを吐けるようになったので、実行速度を比べてみることに。使ったのは次のソース。 (define (fib x) (if (= x 0) 0 (if (= x 1) 1 (+ (fib (- x 1)) (fib (- x 2)))))) (define main (print (fib 25))) 結果。 % ./minscheme compile f.scm % g…

OCaml で Parsec っぽく

OCaml で Parsec っぽいことをやろうとしていましたが、中途半端な状態で終わってしまいました。State モナドっぽいやつを作って、bind とか return も定義して、いくつかの基本的なパーサコンビネータと選択演算子はできたんですが、パースを失敗したときに…

しりとり

やっぱり OCaml も使えないといかんなーと思う今日このごろ。文字列の扱いが最も戸惑う。文字のリストでいいじゃんという感じ。そして Haskell には、Char できちんとユニコードが扱えることを望みます。 let rec delete e = function [] -> [] | x::xs when…

OCaml で非決定計算っぽいことをやる

OCaml で非決定計算っぽいことをやってみることに。最初は Python でやってたんだけど、if が文なことにがびーんとなって OCaml で書き直しました。amb な部分はこんな感じに。id:mzp に、これってただの継続渡しじゃんと言われたが、継続渡し・継続(call/cc…

OCaml本

とうとう出るそうです。みなさんお疲れさまでした。 特にOさんは執筆に力を注ぎながらも本業も疎かにせず、尊敬です。 将来はOさんのようなアクティブな大人になりたいものです。