Ответ 1
Используйте встроенный предикат findall/3
:
?-findall(X0, foo(X0, [1,2,3]), X).
X = [[11], [22]].
Вы можете определить свой another_foo/2
:
another_foo(X, Input) :-
findall(X0, foo(X0, Input), X).
Я хотел бы знать, как сделать предикат, который ставит все результаты, полученные из некоторого запроса (поэтому я получаю результат и нажимаю точку с запятой, пока не получаю False) в списке.
Например, если я пишу foo(X,[1,2,3]).
в каком-нибудь прослушивателе Prolog, скажем, что результат
X=[11];
X=[22];
False.
Я хотел бы получить все эти результаты в списке, поэтому произойдет что-то вроде следующего.
?-another_foo(X,[1,2,3]).
X=[[11],[22]].
another_foo каким-то образом будет использовать foo для создания списка со всеми результатами из foo. Я просто не знаю, как.
Используйте встроенный предикат findall/3
:
?-findall(X0, foo(X0, [1,2,3]), X).
X = [[11], [22]].
Вы можете определить свой another_foo/2
:
another_foo(X, Input) :-
findall(X0, foo(X0, Input), X).