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
。
我是 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
。