- findall(-Var, +Goal, -Bag) is det
- findall(-Var, +Goal, -Bag, +Tail) is det
- Bag holds all alternatives for Var in Goal. Bag might hold
duplicates. Equivalent to bagof, using the existence operator
(^) on all free variables of Goal. Succeeds with Bag =  if
Goal fails immediately.
The findall/4 variation is a difference-list version of
- findnsols(+Count, @Template, :Goal, -List) is nondet
- findnsols(+Count, @Template, :Goal, -List, ?Tail) is nondet
- True when List is the next chunk of maximal Count instantiations
of Template that reprensents a solution of Goal. For example:
?- findnsols(5, I, between(1, 12, I), L).
L = [1, 2, 3, 4, 5] ;
L = [6, 7, 8, 9, 10] ;
L = [11, 12].
domain_error(not_less_than_zero, Count) if Count is less
type_error(integer, Count) if Count is not an integer.
- - Ciao, but the SWI-Prolog version is non-deterministic.
- bagof(+Var, +Goal, -Bag) is semidet
- Implements Clocksin and Melish's bagof/3 predicate. Bag is
unified with the alternatives of Var in Goal, Free variables of
Goal are bound, unless asked not to with the existential
quantifier operator (^).
- setof(+Var, +Goal, -Set) is semidet
- Equivalent to bagof/3, but sorts the resulting bag and removes
duplicate answers. We sort immediately after the findall/3,
removing duplicate Templ-Answer pairs early.
The following predicates are exported, but not or incorrectly documented.
- findnsols(Arg1, Arg2, Arg3, Arg4, Arg5)
- findall(Arg1, Arg2, Arg3, Arg4)