Module si
:- use_module(library(si)).
Safe type tests.
"si" stands for "sufficiently instantiated". It can also be read as "safe inference", so possibly also other predicates are candidates for this library.
A safe type test:
throws an instantiation error if the argument is not sufficiently instantiated to make a sound decision
succeeds if the argument is of the specified type
fails otherwise.
For instance, atom_si(A)
yields an instantiation error if A
is a variable. This is logically sound, since in that case the argument is not sufficiently instantiated to make any decision.
The definitions are taken from Safer type tests in Prolog.
Examples:
?- chars_si(Cs).
error(instantiation_error,list_si/1).
?- chars_si([h|Cs]).
error(instantiation_error,list_si/1).
?- chars_si("hello").
true.
?- chars_si(hello).
false.
when_si(Condition, Goal).
Executes Goal when Condition becomes true. Throws an instantiation error if it can't decide.