Prolog 说明列表中的某些内容(在本例中为 grid/1)是否为白色。序言

Prolog saying if something in a list (in this case grid/1) is white. Prolog

我是 prolog 的新手,想知道您是否有带有特定“'pixels'”的迷宫。你如何实现一个谓词 white/1,它表示像素是白色还是黑色。我遇到的问题是我想做一个谓词,如果我查询?- white(3/3)。它应该 return 正确。这是我的数据库:

grid([ [w, w, w, b, w],
[b ,b, w, w, w],
[w, w, w, b, w],
[w, b, b, b, b],
[w, w, w, w, w] ]).

感谢您的回答,我实现了这个程序:

white(X/Y) :-
    nth1(X/Y, grid, _).

但是在实施这个程序后我仍然得到一个错误。

white(X/Y) :-
    grid(M),
    nth1(X, M, Line),
    nth1(Y, Line, w).

第一个nth1获取行,第二个获取行的元素

我建议使用查询

?- grid(M), nth1(X, M, Line), nth1(Y, Line, Cell).

Cell = w
Line = [w,w,w,b,w]
M = [[w,w,w,b,w],[b,b,w,w,w],[w,w,w,b,w],[w,b,b,b,b],[w,w,w,w,w]]
X = 1
Y = 1 ? ;

Cell = w
Line = [w,w,w,b,w]
M = [[w,w,w,b,w],[b,b,w,w,w],[w,w,w,b,w],[w,b,b,b,b],[w,w,w,w,w]]
X = 1
Y = 2 ? ;

Cell = w
Line = [w,w,w,b,w]
M = [[w,w,w,b,w],[b,b,w,w,w],[w,w,w,b,w],[w,b,b,b,b],[w,w,w,w,w]]
X = 1
Y = 3 ? ;

Cell = b
Line = [w,w,w,b,w]
M = [[w,w,w,b,w],[b,b,w,w,w],[w,w,w,b,w],[w,b,b,b,b],[w,w,w,w,w]]
X = 1
Y = 4 ? ;

只需在每个解决方案后按 ;,prolog 就会为您的迷宫遍历所有可能的 X、Y。您可以了解 nth1 如何访问单元格。

通常我会建议您使用两个显式参数,例如 white(X, Y),除非有充分的理由使用 X/Y