「コンピュータ将棋プログラムをLISPで書く」について
http://labs.yaneu.com/20090905/
まとめてあることが的確でうなづけることばかり。
以上のような理由により、コンピュータ将棋開発者のなかにBonanzaのソースを 参考にしたりする者は多いが、GPS将棋のソースを参考にしようという者はほとんどいない。 参考にしたくても、そう簡単に参考にできるシロモノではないからである。
OSLは難しい。比喩で言うなら「OSLはラテン語で書かれている」
普通は読めない。棚瀬さんが参考にしてるじゃんって? それは「棚瀬さんはラテン語が読める」からでしょう(^^;
(うがった見方をすれば、読めるものなら読んでみなさい!というツンを感じる。デレはあるのか?)
じゃ、ラテン語が読めればいいのか? 読めないのが悪いのか? といえば、次のような問題点が
C++ templateを駆使して書けば、Bonanzaのように似た処理を何ヶ所にも書く必要がなくなる。 しかし、コンパイル時間が伸びるし、書くのにかなりのテクニックを要する。 ソース修正ごとに結構頭を悩ませなければならない。これでは開発効率が 本当に上がっているとは言い難い。
あの棚瀬さんすら自戦記に「コンパイルエラーに悩まされた」と書かれています(^^;
実際、Bonanzaのbitboardではbitboardを使わない場合に比べて高速化が図れているとは言い難い。 これについての詳しい話は割愛する。
保木さん自身もbitboardで速くなったわけではなく「差分利き計算」がいらないので、
「作るのが楽だから採用」みたいに言われていた記憶があります。
GPSのtemplateは似たような処理をまとめるために採用され、
bonanzaのbitboardは、差分計算などバグを生み出しやすい問題を回避するために採用されている
ということで、「両者とも開発効率の向上」が目的になっていると思います
(ただbitboardを用いたことで、本来の利きがないために、bona412は利きを使用しないことで、
終盤がbona3より弱くなっていることにつながっている。やはり将棋には利きが必要なのだろう。
たとえ3駒評価をしても、王金金銀竜と5枚の利きが絡んでる入るマスは、
3駒評価による形の評価では、正しく利きを判断できないはずだし)
スクリプトで似たような処理を生成する方式はBlunderのakiさんが評価関数特徴と学習特徴の生成で
やられてましたね
- Lispを併用するということ?
というわけで、やねうらおさんのアイデアは、
templateをつかって似た処理をまとめるのではなく、Lispを使ってコードを生成する手法のようです
まさか「lispインタプリタから自作する」とは思いつきませんでした(^^;
以上のように、C/C++/C#のコメント中にLISPのコードを埋め込み、 それによりソース生成を行なうことにより、ソースの可読性をあまり損なわず、かつ同じコードを繰り返し記述することを避けることが出来る。
まだ全体像がよく判ってませんが、
インラインアセンブラのようにC++の中にlispコードを埋め込んで、C++のコードをlispに書かせる?
C++のコンパイル時に動くとすると
普通インラインで呼び出すのは自分より低レベルな言語かなと思いますが、これは逆かな?
(アセンブラ<C<C++<C#=java<Lisp ←インタプリタ、関数型言語をより高級と考えた場合)
高級cppみたいな感じもします。templateという機能自体が、型まで区別できる高級cppみたいなもんかな?
と思ってるので、そういう気がするのですが。