Just as ALLADD and ALLREMOVE can be given a list of patterns to add or remove, similarly, ALLPRESENT can be given a list of patterns to look for in the database. If it finds items for all of them it returns a list of the found items (and also assigns it to the variable THEM). Otherwise its result is false. E.g. to find a grandson of TOM:
alladd([
[dick father harry]
[tom father jack]
[bill father tom]
[jack father dick]]);
vars x, y;
if allpresent([[tom father ?x] [?x father ?y]]) then
y =>
endif;
** dick
them =>
** [[tom father jack] [jack father dick]]
For more summary information on the database procedures see:
HELP DATABASE, HELP ADD, HELP PRESENT,
HELP REMOVE, HELP FLUSH, HELP LOOKUP.
HELP FOREACH, HELP FOREVERY