Haskell将棋についてのアピール文書

概要

Haskell将棋は、Haskellという純粋関数型言語で作成しました。
型推論、遅延評価、導出インスタンス宣言、カリー化、高階関数、クロージャ、リスト内包表記、パターンマッチ、セレクタ、@パターン、中置記法、セクション、モナド、コンビネータ等を用いて、コンピュータ将棋の簡潔な記述を目指しました。
結果、339 行1280単語12452文字(空白込み)という極めて小規模かつ、USIプロトコルでの対局、Bonanzaのfv.binを用いた評価関数を備えたプログラムになりました。

課題

変更可能な変数を直接操作できないHaskellにおいて、いかに盤面更新等の副作用のある処理を扱うかが、最大の課題でした。
更新手続きの状態を不可視な変数として持ち、それをモナドのライブラリを利用して操作するST(ステートスレッド)モナドを用い、コピーを伴わない盤面更新を行うプログラムも作成しました。
しかし、結果として純粋関数のみで作成したプログラムよりやや遅くなってしまったため、STモナドは現在利用していません。

参考URL

第21回世界コンピュータ将棋選手権のアピール文書用のプログラム
本アピール文書の内容と直接対応するプログラムのソースコードです。