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)