Моя цель - распечатать список списков, содержащий результаты запроса. 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.
не очень хорошая идея. Я объясняю это тем, что не хочу многократно использовать точку с запятой для получения ответов на все прологи. Когда я удаляю эту часть, вывод:
?- 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, ... - ...], [... - ...|...], [...|...]|...].
что, очевидно, не является моей целью.
Как мне переделать свой код, чтобы получить полный список списков