protocol

# `assignvarsp`

Assignable variables (supporting backtracable assignement of non-variable terms) protocol.

Author: Nobukuni Kino and Paulo Moura
Version: 1.0
Date: 2015/7/31
Compilation flags:
`static`

(no dependencies on other entities)

## Public interface

### `assignable/1`

Makes Variable an assignable variable. Initial state will be empty.

Compilation flags:
`static`
Template:
`assignable(Variable)`
Mode and number of proofs:
`assignable(-assignvar)` - `one`
Exceptions:
Variable is not a variable:
`type_error(variable,Variable)`

### `assignable/2`

Makes Variable an assignable variable and sets its initial state to Value.

Compilation flags:
`static`
Template:
`assignable(Variable,Value)`
Mode and number of proofs:
`assignable(-assignvar,@nonvar)` - `one`
Exceptions:
Variable is not a variable:
`type_error(variable,Variable)`
Value is not instantiated:
`instantiation_error`

### `(<=)/2`

Sets the state of the assignable variable Variable to Value (initializing the variable if needed).

Compilation flags:
`static`
Template:
`Variable<=Value`
Mode and number of proofs:
`(?assignvar)<=(@nonvar)` - `one`
Exceptions:
Value is not instantiated:
`instantiation_error`

### `(=>)/2`

Unifies Value with the current state of the assignable variable Variable.

Compilation flags:
`static`
Template:
`Variable=>Value`
Mode and number of proofs:
`(+assignvar)=>(?nonvar)` - `zero_or_one`
Exceptions:
Variable is not instantiated:
`instantiation_error`

## Protected interface

(none)

## Private predicates

(none)

## Operators

- `op(100,xfx,<=) (public)`
- `op(100,xfx,=>) (public)`

## Remarks

(none)

See also

assignvars