findall/3
создает список для вас, если имя предиката и арность известны, просто используйте его для получения списка L
?- findall(X,name(X),L).
Если имя предиката неизвестно, вы можете использовать call/N
, где N
- это артикль предиката плюс один. Например:
?- [user].
|: a_name(a).
|: a_name(b).
|: a_name(c).
|: ^D% user://1 compiled 0.01 sec, 3 clauses
true.
?- Name =a_name,findall(X,call(Name,X),L).
Name = a_name,
L = [a, b, c].