<< Prev | - Up - | Next >> |
There may be many solutions to a query. For example, suppose we are working with the database
child(martha,charlotte).
child(charlotte,caroline).
child(caroline,laura).
child(laura,rose).
descend(X,Y) :- child(X,Y).
descend(X,Y) :- child(X,Z),
descend(Z,Y).
Then if we pose the query
descend(martha,X).
there are four solutions (namely X=charlotte
, X=caroline
, X=laura
, and X=rose
).
However Prolog generates these solutions one by one. Sometimes we would like to have all the solutions to a query, and we would like them handed to us in a neat, usable, form. Prolog has three built-in predicates that do this: findall, bagof, and setof. Basically these predicates collect all the solutions to a query and put them in a list, but there are important differences between them, as we shall see.
<< Prev | - Up - | Next >> |