1

Prologでゲームを作ろうとしています。このゲームには 2 人のプレイヤーがいます (プレイヤー w - 白と b - 黒)。したがって、私の目的は、プレーヤーが終了するたびに述語 change_player を呼び出すことです。変数 C には、プレイするプレーヤーの値が入ります。プレーヤーが行うプレーの述語は play(C) です。私は play 述語のコードを作成していませんが、最終的に述語 change_player(C) を呼び出すことはわかっています。

私はこれをやろうとしています:

play(C):-
          ( code of the play)

          change_player(C).

change_player(C):- C=w -> (C = b, write(C)); %if the player is w change it to b and write value of C
                  (C = w, write(C)). %else change it to w and write value of C

しかし、change_player(w) を実行すると、エラーが発生します。

私が間違っていることを教えてもらえますか?ありがとうございました

4

1 に答える 1

1

Prolog で変数を「再割り当て」することはできません。

変数は、自由 (つまり、未指定) または特定の値にバインドすることができます (それは別の変数である可能性があります。自由またはバインドは重要ではありません)。

次に、「メインループ」を再考し、バインドする別の変数を追加する必要があります。

play(CurrPlayer, NextPlayer) :-
  % play it
  change_player(CurrPlayer, NextPlayer).

change_player(C, N) :-
   (  C = w
   -> N = b     % if the player is w change it to b
   ;  N = w     % else change it to w
   ), write(N). % and write value of N

if/then/else を囲む括弧を移動したことに注意してください。演算子 ((->)/2、(;)/2、(,)/2 など) を自由に使用すると、不快な驚きを引き起こす可能性があるため、この単純な構文に従うようにしてください。Prolog 制御フローはデバッグが難しい場合があります...

そのコードは無駄に複雑です: Prolog では、制御フローの代わりにパターン マッチングを利用するようにしてください: この「ルール」は、(書き込みを除いて) 同じことをより簡単な方法で行います:

change_player(w, b).
change_player(b, w).
于 2013-10-14T21:08:02.340 に答える