]> Repositorios git - scryer-prolog.git/commitdiff
ADDED: must_be/can_be(not_less_than_zero, ...)
authorMarkus Triska <[email protected]>
Wed, 24 Aug 2022 19:05:44 +0000 (21:05 +0200)
committerMark Thom <[email protected]>
Thu, 27 Oct 2022 05:36:07 +0000 (23:36 -0600)
See #1309.

src/lib/error.pl

index 04b2868143cbe53fd6da58a879ce4b9b283919a1..7efb170ef8c5007d3094a08dc0f71d3d462f100e 100644 (file)
@@ -52,6 +52,11 @@ must_be_(var, Term) :-
         ;   throw(error(uninstantiation_error(Term), must_be/2))
         ).
 must_be_(integer, Term) :- check_(integer, integer, Term).
+must_be_(not_less_than_zero, N) :-
+        must_be(integer, N),
+        (   N >= 0 -> true
+        ;   domain_error(not_less_than_zero, N, must_be/2)
+        ).
 must_be_(atom, Term)    :- check_(atom, atom, Term).
 must_be_(character, T)  :- check_(error:character, character, T).
 must_be_(in_character, T) :- check_(error:in_character, in_character, T).
@@ -135,6 +140,7 @@ type(list).
 type(var).
 type(boolean).
 type(term).
+type(not_less_than_zero).
 
 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    can_be(Type, Term)
@@ -158,6 +164,13 @@ can_be(Type, Term) :-
         ).
 
 can_(integer, Term) :- integer(Term).
+can_(not_less_than_zero, N) :-
+        (   integer(N) ->
+            (   N >= 0 -> true
+            ;   domain_error(not_less_than_zero, N, can_be/2)
+            )
+        ;   type_error(integer, N, can_be/2)
+        ).
 can_(atom, Term)    :- atom(Term).
 can_(character, T)  :- character(T).
 can_(in_character, T) :- in_character(T).