【发布时间】:2019-03-10 08:30:10
【问题描述】:
我有一个由max_size(5, 5) 描述的 5x5 网格。我需要使用 DCG 从该描述中生成所有单元格的列表。
这是我目前的代码:
:- use_module(library(clpfd)).
map_size(5, 5).
natnum(0).
natnum(X) :-
X #= X0 + 1,
natnum(X0).
list_all_cells(Visited) -->
{ length(Visited, 25) },
[].
list_all_cells(Visited) -->
[X-Y],
{ map_size(X_max, Y_max),
natnum(X), natnum(Y),
X #< X_max, Y #< Y_max,
maplist(dif(X-Y), Visited) },
list_all_cells([X-Y|Visited]).
但是,它不会生成列表,只输出 4 对。
对 DCG 的可能查询类似于 list_all_cells([]),它应该列出网格上的所有单元格。例如,对于 2x2 网格,它将是 [0-0, 1-0, 1-1, 0-1](顺序无关紧要)。
事实上,我需要这个谓词来构建另一个称为available_steps/2 的谓词,它将生成给定位置的所有可能移动的列表。拥有available_steps(CurrentPos, Visited),我将能够暴力破解Hunt the Wumpus 游戏并找到所有可能的获得金币的途径。
【问题讨论】:
标签: search prolog dcg wumpus-world