ADDED: not_si/1

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!
This commit is contained in:
Markus Triska
2026-01-18 09:57:37 +01:00
parent 453a88f03e
commit 0dc94ecc0b

View File

@@ -40,6 +40,7 @@
term_si/1,
chars_si/1,
dif_si/2,
not_si/1,
when_si/2]).
:- use_module(library(lists)).
@@ -100,6 +101,17 @@ dif_si(X, Y) :-
; 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).