Thursday 20 December 2007

昼夜逆転中



おかげで昼間眠くって。



Boolean Satisfier は出来ました。

 ((not a) or a) is satisfiable.

 (not ((not a) or a)) is unsatisfiable.

 exists(a,((not a) or a)) is satisfiable.

 (not exists(a,((not a) or a))) is unsatisfiable.



Backtrack をProlog流にやろうとすると、Tree walk をCPS変換する必要があるってのに気づいた後は楽勝でした。しかし、普通の言語でそれをやろうとすると面倒だよなぁ。



CPS変換はInner Class を使っていたんだけど、やっぱり外部が良いなと思って書き直しました。Inner Class の方が記述が一ヶ所に集まるので読みやすい感じもするけどね。



backtrack base depth first search をtry/catch で実装したが、Iterrator とか Thread Pool で実装することも可能だと思った。try/catch が余りに遅いなら書き直すでしょう。(実際、遅いんだけどさ)



Parser に二種類のノードを生成させるようにするので、ちょっとはまる。まぁ、コピペしても良いんだけどさ。Node の生成をFactory経由にすれば良いんだが...





Factory はInterfaceにするのかClass にするのかで、2,3回往復したらしい。Down cast を実行時に拒否するので、アドホックに書かせてくれない。で、結局、Generic に書き直す羽目に。そんなところで時間を取られるのは本質的でない気がする。学生だったら絶対コピペで済ますだろうな。結構書いちゃったコードを、Generic に直すのはかったるい作業だ... Generic にRefactoringするってのは、Eclipse には存在しないらしいです。(そりゃそうだろう...)



public TreeMap<String,Token<Node>> scope;



とか書くと、C++ みたいで嫌な感じ。(と思う人は多いだろう...) 1.5 以前は、Java はcastしまくりだったんだけどね。(何故 > でなく>かは、mixiに文句言ってくれ)



ATVAで聞いた話ではSATは「簡単なことは全部その場でやる」「難しいものは出来るだけ後回しにする」手法が良いようです。一種のShortest Job First だね。



他にやることはたくさんあるんだが、ま、面白かったです。来るべき学生が来てないので、暇だと言う話もあるな。彼らはどうするんだろう?

No comments: