^
),
except that bagof/3
fails when goal has no solutions.findall(Templ, Goal, Bag) :- findall(Templ, Goal, Bag, [])
+Var^
Goal
tells bagof 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). Yes 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] ; No 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] ; No 5 ?-