使用findall创建列表列表

时间:2018-04-26 19:48:15

标签: prolog

我的目标是打印包含查询结果的列表列表。 solution已定义

solution(G, T) :- comb(G, T), allPos(T, G), not(cycle(T)), writeln(T), false.

,输出如下:

?- solution([a-b,a-c,a-d,b-c,c-d],X0).
[c-d]
[c-d]
[c-d]
[b-c]
[b-c]
[b-c]
[b-c,c-d]
[b-c,c-d]
[b-c,c-d]
[b-c,c-d]
[b-c,c-d]
.
.
.(etc...)

到目前为止我创建的内容如下:

findall_call(Input, X) :-
  findall(X0, solution(Input, X0), X).

,将solution(...)的输出转换为以下格式:

?- findall_call(X0, solution([a-b,a-c,a-d,b-c,c-d],X0), X).
[c-d]
[c-d]
[c-d]
[b-c]
[b-c]
[b-c]
[b-c,c-d]
[b-c,c-d]
[b-c,c-d]
.
.
.
X = [].

所以是的,最后与X = [].同样如此。预期输出应该看起来像列表列表:

[[c-d],[c-d],[c-d],[b-c],[b-c],[b-c],[b-c,c-d],[b-c,c-d],[b-c,c-d]...]

任何想法为什么会这么奇怪?我觉得部分, writeln(T), false.并不是一个好主意。我把它放在那里的原因是因为我不想反复使用分号来接收所有Prolog的答案。删除此部分时,输出为:

?- findall_call(X0, solution([a-b,a-c,a-d,b-c,c-d],X0), X).
X = [[c-d], [c-d], [c-d], [b-c], [b-c], [b-c], [b-c, ... - ...], [... - ...|...], [...|...]|...].

这显然不是我的目标。

我应该如何修改我的代码以获取

列表的完整列表

0 个答案:

没有答案