From: Markus Triska Date: Wed, 24 Aug 2022 19:05:44 +0000 (+0200) Subject: ADDED: must_be/can_be(not_less_than_zero, ...) X-Git-Tag: v0.9.1^2~25 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=5b324680ba63443f38a48bfd88dc6a9ed5031534;p=scryer-prolog.git ADDED: must_be/can_be(not_less_than_zero, ...) See #1309. --- diff --git a/src/lib/error.pl b/src/lib/error.pl index 04b28681..7efb170e 100644 --- a/src/lib/error.pl +++ b/src/lib/error.pl @@ -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).