我正在尝试在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)时,它给了我一个错误。
你能告诉我我做错了什么吗? 三江源
答案 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).