Prolog:连续更改两个已知值之间的变量

时间:2013-10-14 20:49:51

标签: variables prolog

我正在尝试在Prolog中创建一个游戏。在这个游戏中有两个玩家(玩家w - 白色和黑色)。所以,我的目标是每次玩家结束时调用谓词change_player进行游戏。变量C将具有将播放的播放器的值。 玩家进行游戏的谓词是游戏(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)时,它给了我一个错误。

你能告诉我我做错了什么吗? 三江源

1 个答案:

答案 0 :(得分:1)

你不能在Prolog中'重新分配'变量。

变量可以是自由的(即未指定的)或绑定到特定值(可能是另一个变量,free或bound并不重要)。

然后你必须重新考虑'main loop',然后添加另一个变量来绑定:

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).