思い切ってpa_monadを実プロジェクトに初めて投入してみた。特に今回はDB周りの処理が多かったので、maybeモナドが大活躍。 module MaybeM = struct let bind m f = match m with None -> None | Some v -> f v let return v = Some v end データベースからs…
やっぱりタプルとオプションはどんな言語でも必須だと確信した 正規表現のマッチ結果をパターンマッチして変数束縛できるのは便利だわぁ Javaの資産がまるごと使えるのはすごい、というかうらやましい η変換に不自由なOCamlerから見ても、高階関数がやや書き…
もう一週間経ってしまいますが、OCaml Meeting in Tokyo 2009にて講演頂いた方、参加下さったOCamlerの皆様、手伝ってくれたocaml-nagoyaのメンバー、そしてid:camlspotterさん、お疲れさまでした。お蔭様でよい会になったのではないかと思います。ありがと…
package itpl.util; import itpl.util.Util; class Observer<A> { var listener : Array<A -> Void> ; public function new() { listener = new Array(); } public function listen( l : A -> Void ) : Void { listener.push( l ); } public function clear_listener</a></a>…
今度はconcurrent cellを使ってみる。 (* to compile, ocamlfind ocamlc -thread -package ccell -linkpkg sf.ml *) let (@@) f g = f g let (+>) g f = f g let tee f x = ignore (f x); x open Ccell open Event let num = let m = Mvar.init_make 0 in fu…
(* to compile, ocamlc -thread unix.cma threads.cma mts.ml *) let nums = let with_lock m f x = Mutex.lock m; let r = f x in Mutex.unlock m; r in let c = ref ~-1 in let m = Mutex.create () in fun () -> with_lock m (fun () -> incr c; !c) () l…
均一と考えられていた液体の水に不均一な微細構造を発見 | 理化学研究所 この手の研究をしていた研究室に所属していた事もあり興味深い。90°Cでも構造があるんだ。へー。でも1nmなら水分子4つ分くらい?そりゃ4つくらいならくっついてても不思議じゃない...…
今日は原爆の日。64年目。私は原爆は嫌いだ。好きな人なんていないと思うけど。今でも原爆が落ちてくるから逃げなきゃいけないと焦る夢を見ることがある。昔は結構頻繁に見てた。実は子供のころに観に行かされた原爆の劇と展示と「おこりじぞう」という絵本…
こないだからレイアウトは述語と合成がいいとチラチラ言っているので、今のところ考えている述語を晒す。 type point = int * int type size = int * int type rect = point * size type independent = (* 自らsizeが決まるもの *) [ `Fix of size | `Prefer…
仕事関係でちょっと思う所があるので、書いて考えをまとめてみる。 http://kusoshigoto.blog121.fc2.com/blog-entry-278.html このエントリの内容は、ちょっと言葉があれだけど、分かりやすい。私も反省すべき点が多い。素直に言うと「奴隷型顧客満足第一主…
※似たようなことをもう何度か書いてきたけど、自分の考えをまとめるために書きます。読みづらいのであしからず。 レイアウトできない問題 思うようにレイアウトできない。無駄な試行錯誤の時間がかさむ。これはプログラマのGUIライブラリへの習熟不足の問題…
バックの理論は知らんけど、面白そうなレイアウトシステム発見。 ALM - The Auckland Layout Model Domain Specific High-Level Constraints for User Interface Layout 最初はちょっと面倒に思うかもしれないけど、やっぱりレイアウトはこんな感じで合成し…
Amthingにもそろそろ衝突判定をと思っていたら、こんなのを発見。 その8 4分木空間分割を最適化する! 空間を再帰的に4分割して、その空間にモートン順序と呼ばれる順序付をして、鬼のようなビット演算を駆使してインデックス化。恐るべし。 でも意外と簡単…
OCamlに関連することなら何でも歓迎です。OCamlでピザを注文しました!とかOCamlを拡張してHaskellにしてみました!とか、ありありだと思います。5分であなたのネタを披露してみませんか?私(ogasawara@itpl.会社.jp)かid:camlspotter氏までメール下さい。よ…
ふと想うんですが、ある言語の「表現能力」ってうまく厳密に定義できないものですかね。それがあると言語の比較に便利じゃないですか。それが同型なら同じ表現能力と言えると。もちろんチューリング完全とか持ち出すとフラット過ぎるので、それはなしの方向…
今日もレイアウトで苦しむの巻。どうしてこう生産性が低いんだろうね、GUIのレイアウトシステムは。たぶん、FlowLayoutだとかBlockLayoutだとかGridLayoutだとか、なんとなくその場のノリで決めた感じのするいい加減な合成だからいかんのだな。レイアウトの…
先日いげ太さんに紹介されたF#のイベント(http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/FSharp.Core/Microsoft.FSharp.Control.Event.html)が面白かったので、Objective Camlでも(一部を)実装してみました。↓ http://forge…
友人から寡黙に送られて来たガンダムの写真。べ、別にうらやましくなんてなんだからね!!
古き伝統のライブラリから脱却して、次のステップに進んだイベントドリブンなGUIツールキットはどんなものになるのでしょう。難しいですが、その要件が少しずつ幾つか見えてきた気がしてきたので、メモしておきます。 ■イベントの一級化と合成 これはつまり…
http://blogs.msdn.com/dsyme/articles/FSharpCompositionalEvents.aspx これって2006年の記事だけど、F#は結構昔から頑張ってたんだー、すごいな。 二つのイベントに依存するイベントは作れないのかなー?なんとなくこのままでは作れなそうではあるが。今度…
concurrent cellに新しいモジュールDvar(http://forge.ocamlcore.org/plugins/scmsvn/viewcvs.php/trunk/dvar.ml?rev=20&root=ccell&view=markup)を導入しました。で、その基本的な関数がやっとできた。最近これを作ってたので、籠ってました。 Dvarとはどん…
FRP、Functional Reactive ProgramingのFをS、RをT、PをDに置き換えるとSTD。これは、Solve The Dependencyの略。つまり、FRPは依存性解決の事だったんだ!! な、なんだって〜〜?!
前回までで多相バリアントの基本的な機能は説明してきました。そこで今回は、多相バリアントのとても重要な応用についてお話したいと思います。それは、場合分け構造の拡張問題です。 場合分け構造の拡張は難しい 例えば、次のようなコードがあったとします…
さて、今日は多相バリアントの「三つの型」について紹介しようと思います。この「三つのの型」をうまく活用する事で、安全さと柔軟さと再利用性を同時に手に入れることができます。 三つの型 同じ`Aと`Bというタグを使っても、宣言できる多相バリアント型に…
前回は、OCamlの多相バリアント型のタグは複数の多相バリアント型に属する事ができるというお話でした。では、この性質を応用するとどんな嬉しいことがあるのでしょうか?今日はまず、多相バリアントを組み合わせる場合のストーリーを挙げてみたいと思います…
以前OCamlは学習コストが低いといいましたが、私のOCaml学習の中で唯一多相バリアントだけはその意味を理解するのに時間がかかりました。ただ、分かってみると単純な話で、誰かが噛み砕いて説明してくれれば回り道しなくてもよかったのではないかと悔やまれ…
多相レコードなんだ!普通のレコードって多相にならないよね!?例えば、 # type person = { name : string; age : int };; (* person型 *) type person = { name : string; age : int };; # type car = { name : string; doors : int };; (* car型 *) type ca…
レコードと高階関数で書けるんだ!TAPLに載ってるのを読んで、へー(×2)と思ったので紹介するね!*1 # type t = { mutable name : string; mutable age : int };; type t = { mutable name : string; mutable age : int; } # type m = { get_name : unit -> …
http://blog.mestan.fr/2009/04/28/bouncing-ball-in-ocaml-with-ocamlsdl/という話を見つけたのでAmthingでも挑戦。 (*******************************************************************) (* Amthing Example3. bounce ball *) (**********************…
なぜQt程のライブラリが、ウィジットが重なっている時にその下側でマウスイベントを取るオプションすら持ってないんだー。うがー。ポップアップメニューの出現位置も全く制御できないしー。やってられねー!