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