1

我正在尝试在 Prolog 中创建游戏。在这个游戏中,有两个玩家(玩家 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 回答