2002-03-11 [長年日記]
λ. あぁぁぁぁ。時間を無駄にしすぎ。
λ. 正規表現
気晴らしにRubyで正規表現(?)のエンジンを書いてみた。どうせなので文字列じゃなくてEnumerableを対象にすることにする。
NFAからDFAへの変換時に、馬鹿正直に巾集合オートマトンを作ってるせいか、かなり遅いなぁ。ただ、Prolog版よりRuby版の方が速かったのには驚いた。あとは、bisimilarな状態が複数出来てしまう事があるのがヤな感じ。bisimulationで割った商集合を状態集合とするオートマトンを作れば良いんだけど、具体的にはどうやるんだっけなぁ? 確かcoalgebraで変数を…… まあ気が向いたら実装してみるか。
a = Object.new re = SRegexp.new(SRegexp.concat(SRegexp.star(SRegexp.concat(0, 1)), a)) re.accept? [0,1,0,1,a] #=> true
λ. Re: druby vs リモートでの例外
その例だとURIがDRb.primary_serverと一致して、リモート呼び出しでなくなってしまうと思います。再現例としてはこんな感じかと。
require 'drb' DRb.start_service(nil, nil) DRbObject.new(nil, DRb::DRbServer.new(nil, lambda{raise RuntimeError.new.extend(DRbUndumped)}).uri).call #=> # drb/drb.rb:239:in `raise': exception class/object expected (TypeError) # from drb/drb.rb:239:in `method_missing' # from hoge.rb:3
おお,考えはしてたけどめんどうくさくてやらなかった奴だ :-)<br>M17N までのつなぎに何か真面目に作る時いるかななんて.いかん<br>せん本気でやる気がないから要素も作る気にならなかったり :-P
200行くらいで、案外簡単に実装できましたよ。<br>効率を考えないでこういうのを書いてみるのも楽しいものですね。