protocol

# `assignvarsp`

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

Author: Nobukuni Kino and Paulo Moura
Version: 1:0:1
Date: 2019-06-10
Compilation flags:
`static`
Dependencies:
(none)
Remarks:
(none)
Inherited public predicates:
(none)

- Public predicates

  - `assignable/1`

  - `assignable/2`

  - `(<=)/2`

  - `(=>)/2`

- Protected predicates

- Private predicates

- Operators

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

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

## Public predicates

### `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 predicates

(none)

## Private predicates

(none)

## Operators

### `op(100,xfx,<=)`

Scope:
`public`

### `op(100,xfx,=>)`

Scope:
`public`

See also

assignvars