継承とメモ化と再帰関数

以前、任意の再帰関数をメモ化するためにもにょもにょする話があったが、アレはrecursiveがうまくいかなくて気持ち悪いことになった。

で、最近他人様のblogをちらほらと読んでいたのだが、id:mmatsuokaさんのところに継承を使った何とも怪しいプログラムを発見。

http://d.hatena.ne.jp/mmatsuoka/20051227#1135613159

むはー。基底であるFibクラスのメンバ関数fib内における再帰的な呼び出しで、うまいこと子クラスであるFastFibのfibを呼ばせたい。そこに仮想関数を使って、無理矢理子クラスのfibを呼ばせるわけだ。なるほど。遠い昔の記憶に、OCamlインタプリタSchemeインタプリタでlet recを実装するときにはmutableかなんか(でしたっけ?)使わないとできないよって話があったを使ったのを思い出す。
というわけで、C++で実装しまする。

続きを読む

OCamlのprintf

デバッグ用のエラー出力をしたいという衝動に駆られると、Printfモジュールを使うことになるわけだが、残念ながらPrintf.printfはflushしてくれない。出力文字列に\nがあってもだめなんで、いちいち flush stderr; しないといけない。コレハメンドイ。
そこでflushしてくれるprintfを書こうとすると困ったことになる。

続きを読む

カスタマイズ

昔、後輩のママチャリにドロップハンドルつけるという話があったが、どこかへ流れてしまった。で、あれから2年。ママチャリにドロップハンドルつけて、低い姿勢で急坂を駆け下りるおっちゃんを発見! もちろん前のカゴつけたまま。うは。以前見たMTBに子供用の椅子を2つつけたおばちゃんとどっちがすごいか。