0

我正在尝试制作类似于扫雷的游戏,我需要检查地图中正方形的邻居,但我的 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 之间循环?

4

1 回答 1

0

Prolog 中没有像这样的真正循环。我也不确定使用assert动态更改事实数据库是否明智(通常最好在结构中表示您的数据)。但是如果你真的坚持使用“循环”来解决它的副作用,你应该使用forall

?- forall( between(-1,1,X), format('~d~n', [X]) ).
-1
0
1
true.
于 2013-05-15T14:14:28.200 回答