protocol

# `assignvarsp`

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

Availability:
`logtalk_load(assignvars(loader))`
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`

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