- [ISO]findall(+Template, :Goal, -Bag)
- Create a list of the instantiations Template gets
successively on backtracking over Goal and unify the result
with Bag. Succeeds with an empty list if Goal has
no solutions. findall/3
is equivalent to bagof/3
with all free variables bound with the existential operator (
^), except that bagof/3 fails when Goal has no solutions.
- findall(+Template, :Goal, -Bag, +Tail)
- As findall/3,
but returns the result as the difference list
Bag-Tail. The 3-argument version is defined as
findall(Templ, Goal, Bag) :- findall(Templ, Goal, Bag, )
- [ISO]bagof(+Template, :Goal, -Bag)
- Unify Bag with the alternatives of Template. If Goal
has free variables besides the one sharing with Template, bagof/3
will backtrack over the alternatives of these free variables, unifying
Bag with the corresponding alternatives of Template.
+Vartells bagof/3 not to bind Var in Goal. bagof/3 fails if Goal has no solutions.
The example below illustrates bagof/3 and the
^operator. The variable bindings are printed together on one line to save paper.
2 ?- listing(foo). foo(a, b, c). foo(a, b, d). foo(b, c, e). foo(b, c, f). foo(c, c, g). true. 3 ?- bagof(C, foo(A, B, C), Cs). A = a, B = b, C = G308, Cs = [c, d] ; A = b, B = c, C = G308, Cs = [e, f] ; A = c, B = c, C = G308, Cs = [g]. 4 ?- bagof(C, A^foo(A, B, C), Cs). A = G324, B = b, C = G326, Cs = [c, d] ; A = G324, B = c, C = G326, Cs = [e, f, g]. 5 ?-
- [ISO]setof(+Template, +Goal, -Set)
- Equivalent to bagof/3, but sorts the result using sort/2 to get a sorted list of alternatives without duplicates.
Tag confusing pages with doc-needs-help|Tags are associated to your profile if you are logged in