何だか因縁つけているばっかりなのは格好悪いなあと思い、 先週末は Gauche で遊んでました。 題材として、数独(Anthyでsudokuが変換できない)を選びました。 要するに、パズルを解こうとした訳です。
Schemeでプログラムを書くのはむちゃくちゃ久しぶりで、 すごく違和感があって、 感覚を取り戻すのにすごく時間がかかりそうでした。 どんな言語でもそうなんですけど、 しばらーく触ってないと感覚を失いませんか? 一週間ぐらいリハビリすれば戻りそうですが、 今のところSchemeで書いてもPythonみたいなプログラムになってしまいます。
まあこれはしばらく諦めることにしたのですが、 問題はSchemeじゃなくて、 数独そのものだったりしました。 これで解けるはずと思ったアルゴリズムで解けまへんでした。 ありゃりゃ。 本気で頭悪くなっているかもしれん。
何というか、人間がすらっと解けるようなゲームなんだから、 本気で探索しなくても可能性を削っていけば一直線に解けそうな気がしたんですね。 でもうまくいかない。 なんでだろう。 考え方が悪い?
問題は ニコリのおためし問題 をパクってきて使ったんですが、 問題10なんかはこのやり方ではすぐに行き詰まってしまいました。 しょーがないので、自分で解いてみて、 人間がどう考えながら進行するのか、 自分の脳味噌を観測しながらやってみたんですけど、 やっぱり可能性絞って一直線に突き進んでいるだけのような気がします。 ちゃんとそれで解けるし。 なんでだろう。
Scheme自体の話をすれば、 GaucheはCLOSっぽいオブジェクト指向をサポートしているんで、 それで遊んでたんですけど、 こういう問題だと別に要らないかな。 dynamic bindingっつーか、 polymorphismっつーか、 そういうことをやらないなら、 オブジェクトはただの箱で、 alistでいいじゃんってことになるんですな。
それから、for-eachとかmapとかlambdaとかがやたら深くなっていくと、 さっぱり何書いているか分からん。 もっと細かく関数化するなり、 lambdaはletでとりあえずどっかに放りこんでやるなりすれば、 もうちょっと見通しが良くなるのかもしれませんが、 やっぱり可読性はPythonの方が数段上だと感じざるを得ないですね。 慣れの問題じゃないと思います、 Pythonは全然知らないときから意味は汲み取れましたから。 でも書き方が悪いと言われればそれまでで、 もうちょっとやりようはあるのかも。