findall(X, T, L).
 

findall(X, T, L). - Собирает значения, возникающие в процессе бектрекинга, в список.

X

Терм

T

Выражение

L

Список результата

 

Определение предиката:

findall(E,R,_) if R, take_temp_list(List), connect(List,[E],Nl), assert(temp_list(Nl)), fail.
findall(_,_,List) if retract(temp_list(List)),!.

take_temp_list([ ]) if not(temp_list(_)), !.
take_temp_list(List) if retract(temp_list(List)), !.

 

Примеры

Цель

Результат

Комментарий

program:
a(1).
a(2).
a(t).
a(1).

goal: findall(X, a(X), L).

L=[1, 2, t, 1]

Сформирован список L, в который включены все предикаты программы, унифицирующиеся с a(X)