Пролог |Могу ли я продолжить выполнение после ложного? - PullRequest
0 голосов
/ 03 декабря 2018

Используя пролог, могу ли я продолжить выполнение после того, как строка вернет false?

Мне нужно создать игру в крестики-нолики.Я хочу проверить состояние победы после хода каждого игрока.

checkwin возвращает true, когда есть выигрышное состояние, но false в противном случае.Проблема в том, что после того, как он вернул false, я не могу перейти к следующему ходу игрока.

Как я могу проверять его каждый ход и продолжать выполнять код, следующий за проверкой?Есть ли способ «продолжить, если ложь»?

adjustGame(PosX, PosY, Gameboard, Token) :-
    update(PosX, PosY, Gameboard, Newboard, Token),
    display(Newboard),
    checkwin(Newboard,Token),% This is false until the game has a winner
    play(Newboard,Token).    % but I want to execute this line until then

checkwin([A,B,C,D,E,F,G,H,I],T) :-
    same(A,B,C,T);
    same(D,E,F,T);
    same(G,H,I,T);
    same(A,D,G,T);
    same(B,E,H,T);
    same(C,F,I,T);
    same(A,E,I,T);
    same(C,E,G,T).

same(X,X,X,X).

Спасибо!

1 Ответ

0 голосов
/ 03 декабря 2018

Разъединение - это оператор ;:

?- false ; X=3.
X = 3.

Подумайте об этом if-else - если false тогда false else X=3:

?- true ; X=3.
true

?- check_win(...) ; play_game(...).
... 

Существует также полноценный if-then-else :

?- true -> X=4 ; X=3. 
X = 4.

?- false -> X=4 ; X=3.
X = 3.

?- check_win(...) -> writeln("WIN"); play_game(...).
... 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...