Пролог для ошибки синтаксиса цикла

Я пытаюсь сделать игру похожей на тральщик, и мне нужно проверить соседей квадрата на карте, но я получаю синтаксическую ошибку в цикле for, я использую SWI-Prolog

checkneighbours(X,Y) :-
retractall(vecini(_)),
assert(vecini(0)),
foreach(I in X-1..X+1,
            (foreach J in Y-1..Y+1,
                (map(I,J,Z),
                    ( Z=:= "X"
                                -> vecini(V),
                                V1 is V+1,
                                assert(vecini(V1))
                    )
                )
            )
        ).

разве я не объявил петли правильно? или как я могу сделать петлю между X-1 и X+1?

1 ответ

Решение

В Прологе нет подобных петель. Я также не уверен, если это разумно использовать assert динамически изменять базу данных фактов (обычно лучше представить ваши данные в структуре). Но если вы действительно настаиваете на использовании "петли" для ее побочных эффектов, вы должны использовать forall:

?- forall( between(-1,1,X), format('~d~n', [X]) ).
-1
0
1
true.
Другие вопросы по тегам