built-in method
forall/2
Description
forall(Generator, Test)
For all solutions of Generator
, Test
is true. This meta-predicate
implements a generate-and-test loop using a definition equivalent to
\+ (Generator, \+ Test)
. As a consequence, no variables in the arguments
are bound by a call to this predicate. This predicate often provides a better
alternative to a failure-driven loop as an unexpected Test
failure will
not be ignored as it will make the forall/2
call fail.
This built-in meta-predicate is declared as a private method and thus cannot be used as a message to an object.
Meta-predicate template
forall(0, 0)
Modes and number of proofs
forall(@callable, @callable) - zero_or_one
Errors
Either
Generator
or Test
is a variable:instantiation_error
Generator
is neither a variable nor a callable term:type_error(callable, Generator)
Test
is neither a variable nor a callable term:type_error(callable, Test)
Examples
To call both goals in the context of the object or category containing the call:
forall(Generator, Test)
To send both goals as messages to self:
forall(::Generator, ::Test)
To send both goals as messages to explicit objects:
forall(Object1::Generator, Object2::Test)