[ library(tentative) | Reference Manual | Alphabetic Index ]
# tent_set(?X, +TV)

Set X's tentative value to TV
*X*
- Any term, typically a variable
*TV*
- A (nonvar) term

## Description

Give a variable (or several variables within a term) a tentative value.
A tentative value cannot be itself a variable.
- If X is a variable without tentative value, it will be given the
tentative value TV. In addition, its violatedness count will be
initialised to 0.
- If X already has a tentative value, its tentative value is
changed to TV. (Note that this may trigger further computation!)
The violatedness count remains unchanged.
- If X is already instantiated, TV must be a strict instance of X.
Variables within X are given tentative values from the corresponding
instantiated parts of TV.

### Modes and Determinism

- tent_set(-, +) is det
- tent_set(+, +) is semidet

### Fail Conditions

TV is not an instance of X
### Exceptions

*(4) *
- TV is not sufficiently instantiated

## Examples

?- tent_set(X, 27).
X = X{27 -> 0}
Yes (0.00s cpu)
?- tent_set(X, 27), tent_set(X, 99).
X = X{99 -> 0}
Yes (0.00s cpu)
?- tent_set(foo(X), foo(27)).
X = X{27 -> 0}
Yes (0.00s cpu)
?- tent_set(X, Y).
instantiation fault in X tent_set Y
Abort

## See Also

tent_get / 2, has_tent_value / 1, tent_fix / 1