シンプルミニマックスアルゴリズムでtic-tac-toeを解決しようとしています。シンプルですが、多くの言語をカバーする必要があります。tic-tac-toeのミニマム
ボードは、999(バインドされていない)変数の配列として表され、x
またはo
に設定されています。
勝利条件は、基本的にすべての8種類のwin(Player, [X1,X2,X3|_]) :- X1==Player,X2==Player,X3==Player.
などです。 drawは、すべての変数がバインドされているかどうかの単純なチェックです。
move句も簡単です:move(Player, [X|_], 0, 0) :- var(X), X=Player.
、可能なすべての位置について(私は後でプログラムでコードを再利用しています:))。
私はminimaxのために基本的に必要なすべてのものであるべきであるmove(Player, Board, X, Y).
です(明らかに、コンピュータが勝った場合は1を返し、描画の場合は0を返す単純なユーティリティ関数です。if人間が勝つ、それは簡単です)。私はそれをどのように実装するのか分かりません。ネット上にあるすべての例はかなり複雑でよく説明されていません。
注意n^2以上の実行時の動作には問題ありません。効率的ではありません。そして、私はlisp、python、javaでミニマイズを書く方法を知っています - プロローグにそのコードを "移植"する方法はまったくありません。
http://stackoverflow.com/a/8436788/502187を参照してください。 –