我的目标是打印包含查询结果的列表列表。 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, ... - ...], [... - ...|...], [...|...]|...].
这显然不是我的目标。
我应该如何修改我的代码以获取
列表的完整列表