[ library(suspend) | Reference Manual | Alphabetic Index ]

# ?Expr1 and ?Expr2

Both Expr1 and Expr2 arithmetically evaluate to 1

Expr1
  A boolean expression
Expr2
  A boolean expression

## Description

Suspends until both Expr1 and Expr2 are ground, and then both arguments are evaluated. Succeeds if both evaluate to 1.

Typically, the expressions contains reifiable constraints, in which case a corresponding reified constraint is set up, and the expression is replaced by the resulting boolean variable.

### Modules

This predicate is sensitive to its module context (tool predicate, see @/2).

### Fail Conditions

Expr1 or Expr2 do not both evaluate to 1

### Exceptions

(24) number expected
  Expr1 or Expr2 is not an arithmetic expression.

## Examples

    	?- B and 1, B = 1.
    	B = 1
    	Yes (0.00s cpu)

    	?- B and 1, B = 0.
    	No (0.00s cpu)

    	% arguments are typically reifiable expressions:
    	?- X > 5 and X < 7, X = 7.
    	No (0.00s cpu)

    	% the previous example is equivalent to:
    	?- >(X,5,B1), <(X,7,B2), B1 and B2, X=7.
    	No (0.00s cpu)

    	% and/or/=>/neg are themselves reifiable:
    	?- X > 5 and neg(X < 7), X = 7.
    	X = 7
    	Yes (0.00s cpu)

## See Also

and / 3, or / 2, => / 2, neg / 1, ic : and / 2, gfd : and / 2