built-in method

(\+)/1

Description

\+ Goal

Not-provable meta-predicate. True iff call(Goal) is false. This built-in meta-predicate is declared as a private method and thus cannot be used as a message to an object.

Warning

The argument is always compiled (for improved performance). As a consequence, when the argument is a control construct (e.g. a conjunction), any meta-variables will be wrapped with the equivalent to the call/1 control construct. Note that these semantics differ from the ISO Prolog Core standard specification for the (\+)/1 built-in predicate. For example, assuming a conforming system:

| ?- X = !, \+ (member(Y,[1,2,3]), X, write(Y), fail).
1

X = !

But in Logtalk X is compiled into a meta-call, which is not cut-transparent:

yes
| ?- logtalk << (X = !, \+ (member(Y,[1,2,3]), X, write(Y), fail)).
123

X = !

Note that the ISO Prolog Core standard doesn’t specify a cut-transparent alternative to the call/1 control construct.

Meta-predicate template

\+ 0

Modes and number of proofs

\+ +callable - zero_or_one

Errors

Goal is a variable:
instantiation_error
Goal is neither a variable nor a callable term:
type_error(callable, Goal)

Examples

Not-provable goal in the context of the object or category containing the call:
\+ Goal
Not-provable goal sent as a message to self:
\+ ::Goal
Not-provable goal sent as a message to an explicit object:
\+ Object::Goal

See also

call/1-N, ignore/1, once/1