2番目に悩んだこと

Lispで将棋プログラムを書こうと思った後、2番目に悩んだ事は既存のGUI(CSA将棋、MyBona、将棋所など)を使用させてもらうのなら、いったいどうやってLispで書いたプログラムとインターフェースを取るかと言う事でした。
そもそも、そこら辺にあるフリーのLisp処理系で処理系から独立した実行可能形式(EXEやDLL)モジュールをコンパイルする事で作成できるかどうかも良く分かりませんでした。
Allegro Common Lispのような商用の処理系ならそういう事が得意なのは分かっていましたが、KCL(GNU Common Lisp)、CLISP、ECLのようなフリーの処理系でもできるのか?
いろいろと分からないので、この前ある掲示板サイトで質問してみました。

実行可能形式のモジュールは何とか作れそうな(作れる処理系が存在する)のですが、既存のGUIとインターフェース可能なのかどうかがどうにも分かりません。
つまりGUIの方からLispで書いたプログラムを呼び出して、パラメータを受け渡せるのかどうか?
Lisp処理系の側からCで書かれたプログラムをライブラリ化して呼び出すのは良く行われていますが、その逆は可能なのか?

そもそも私自身がCSA将棋やMyBona、将棋所がどのように思考エンジンとやりとりしてるのか良く分かっていなかったので質問自体が曖昧で詳しく答えてもらえるはずが無かったのです。

それでも「Lisp処理系とSocketで通信するDLLモジュールを作成し、それがGUIからコマンドを受け取りそのまま思考エンジンに(Socket通信で)渡せば良いのでは?」と言うアドバイスをもらい、その方針で行けば良いかなあと今は考えています。

特にLispで書いたソースをコンパイルした後のEXE(あるいはDLL?)だけでなく、Lisp処理系の上で動いている開発途中のプログラムもGUIとインターフェースして動作させながらデバッグできたらと思っています。
こちらはちょっと難しいのかも知れませんが、その場合デバッグ用途専用のGUIを自作する必要が出て来ます。

最初に悩んだこと

Cordwainer2007-09-11

Lispを使用して将棋ソフトを製作しようと思い立った後で最初に悩んだ事はどんなLispでコーディングを始めるかと言う事でした。
具体的にはCommon Lispで行くかSchemeで行くかの選択です。
最初はSchemeの事など全く頭に無かったと言うか、名前を聞いた事がある程度だったのですが、Schemeの静的スコープ、末尾最適化の保証、「継続」等の機能、仕様が小さく最小主義的Lispである事、即ち純粋な関数型言語に性格が近くアメリカの大学ではプログラミング教育に利用されている事などを知り学んでみたくなりました。

そのため「計算機プログラムの構造と解釈 第二版」(有名なSICPの和訳本)や「Schemeによる記号処理入門」(森北出版)なんて本を買ってみたのですが、結局あっさり方針転換してCommon Lispを使用する事にしました。

理由はやはりCommon Lispの方が仕様が巨大な分、柔軟で何でも出来そうだったからです。手続き型言語のアナロジー(類推)で言えばPascal言語とC言語の違いと言った感じでしょうか。

後、中村正三郎さんのブログ
Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp
絶賛されていたと言う事も大きな要因です。
ゲーム木の探索の類のサンプルはSchemeの本よりもCommon Lispの本により多く載っているような気がします。

また、そのしばらく前にたまたま買っていたOn Lisp-Advanced Techniques for Common LispCommon Lispの強力な拡張性に強いインパクトを感じたと言う事もあります。まだ、ほとんど読んでませんけどw。
On Lispの日本語訳は翻訳者の野田 開さんがWeb上にも無償で公開していますね。
On Lisp
日本語訳の書籍を買ってからその存在に気が付いたのですが、やはり本の形の方が格段に読みやすいです。一方、原書を買って良く意味が分からないところだけ参照するにはWeb上の翻訳は大いに役立つと思います。

CSAの例会に…出席できませんでした

昨日(09/08)の土曜日に開催されたCSAの9月例会に出席して、ついでに入会手続きを済ませてしまおうと思っていたのですが、結局出席できませんでした。

原因は体調不良(前日から続く睡眠不足)です。クソー、台風め。

小宮さんの日記を読むととても興味深く刺激になりそうな話が語られたようでとても残念です。
http://d.hatena.ne.jp/mkomiya/20070909

11月のGPWは是非とも参加させてもらいたいと思います。
その前に入会手続きだけでも済ませておかねば。

米Palm Foleoの開発を中止

Palm Foleo発表

個人的に注目していた(ありていに言えば欲しかった)PalmのFoleoが開発中止になってしまいました。
http://japanese.engadget.com/2007/09/04/palm-foleo/
以前Foleoの情報を載せていたPalmのWebを見てももはや"Page not Found"で無かった事にされています。
開発中止は公式ブログで発表されたらしいですが、Web上に何の説明も無いのは納得いきません。
Jeff Hawkinsがあれだけ派手に宣伝していたのですから。

ああ、比較的小さくしかし画面サイズはある程度大きくて起動の速いデバイスでWebサーフィンしたりメールを見たりしたかったのに。

仕方が無いから今朝の新聞の広告で見たHPのZENでも検討するかなあ?
http://h50146.www5.hp.com/products/portables/personal/dv2405/model_c.html

将棋ソフトをLispで開発しよう

第17回コンピュータ将棋選手権のようす

大学生の頃からコンピュータ将棋の開発をやってみたいと思っていたが、なかなか踏み出せなかった。今年3月のボナンザ対渡辺竜王戦に触発された事もあって早く開発を始めたかったが方針が決まらない。これまでのコンピュータ将棋の開発手法をそのまま踏襲したのでは面白くない。

ボナンザが評価関数を機械学習により生成しうまく行ったのを見て、私も評価関数は基本的に自動生成したいと考えた。私自身の棋力が非常に低い(将棋クラブ24の段級位で13級)というのも大きな理由である。
昔からニューラルネットに興味を持っていたので機械学習のみならずニューラルネット、エージェント学習、GAなぞいろいろな手法で試してみたい。

しかしながらニューラルネット等を勉強しながら、評価関数の部分からいきなり作り始めると言うわけにも行かないのでまず指し将棋プログラムの骨格を作らなければならない。
GUIや通信モジュールはCSA将棋かMyBona、あるいは最近発表されたばかりの「将棋所」を利用させてもらうとしても思考ルーチンの開発をどのように始めるか?

「うさぴょんの育ての親」さんの著書を参考にC++Javaで開発する事も考えたが、どうにも個性が出せそうにない。その方針で始めてしまうと「れさぴょん」そのままからなかなか抜け出せずに苦労しそうな気がする。
すなわち自分で将棋プログラムの骨格を考える事をサボってしまうと、後に評価関数を自動学習タイプのものに変更する時点でも相当な困難に突き当たるように思える。

そこで何か、自分でプログラムの骨格を必然的に考えなければならないような開発手法は無いかと考えてるうちにLispで開発を始める事を思いついた。Lispにも前々から興味だけはあったが全く習得していない言語である。
何もかも初めての方法にチャレンジすると言うとんでもない方針ではあるが、ともかく今日から少しずつ始めてみようと思う。