2013-10-14 79 views
1

我想在Prolog中創建一個遊戲。在這個遊戲中有兩個玩家(玩家w - 白色和黑色)。所以,我的目標是每次玩家結束時都會調用謂詞change_player。變量C將具有將玩的玩家的價值。 玩家所做的遊戲的謂詞是play(C)。我沒有創建播放謂詞的代碼,但我知道最後它會調用謂詞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)它給了我一個錯誤。

你能告訴我我做錯了什麼嗎? Thankyou

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