2013-10-14 1 views
1

Я пытаюсь создать игру в Prolog. В этой игре есть два игрока (игрок w - белый и b-черный). Итак, моя цель состоит в том, чтобы вызвать предикат change_player каждый раз, когда игрок заканчивается, это очередь играть. Переменная C будет иметь значение проигрывателя, который будет воспроизводиться. Предикат игры, сделанный игроком, - это игра (C). Я не создал код для предиката игры, но я знаю, что в конце он вызовет предикат change_player (C).Prolog: Изменение переменной между двумя известными значениями последовательно

Я пытаюсь сделать это:

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 (ш) он дает мне ошибку.

Можете ли вы сказать мне, что я делаю неправильно? 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 

Примечание Я переместил скобку, окружающее если/то/другое. Постарайтесь следовать этому простому синтаксису, потому что для либерального использования операторов (например, (->)/2, (;)/2 и (,)/2) может вызвать некоторые неприятные сюрпризы. Пролог управления процессом может быть трудно отлаживать ...

Этот код является бесполезным комплексом: в Prolog попытайтесь использовать сопоставление шаблонов вместо потока управления: это «правило» делает то же самое (кроме записи) проще путь:

change_player(w, b). 
change_player(b, w). 
Смежные вопросы