For a recent example that would benefit from this, see "Prolog Basics
Explained with Pokémon" by @alexpetros:
https://unplannedobsolescence.com/blog/prolog-basics-pokemon/
Thank you a lot!
term_si/1,
chars_si/1,
dif_si/2,
+ not_si/1,
when_si/2]).
:- use_module(library(lists)).
; throw(error(instantiation_error,dif_si/2))
).
+%% not_si(+Goal).
+%
+% True if Goal is not provable. Instantiation error if Goal is not
+% ground.
+
+:- meta_predicate(not_si(0)).
+
+not_si(Goal) :-
+ term_si(Goal),
+ \+ Goal.
+
:- meta_predicate(when_si(+, 0)).
%% when_si(Condition, Goal).