From: Markus Triska Date: Fri, 11 Aug 2023 20:46:46 +0000 (+0200) Subject: ADDED: succ/2, part of the Prologue for Prolog X-Git-Tag: v0.9.2~10^2~1 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=26c0b4fc75d1f2b80cf13de62a49a7851ef04a57;p=scryer-prolog.git ADDED: succ/2, part of the Prologue for Prolog Specification: https://www.complang.tuwien.ac.at/ulrich/iso-prolog/prologue#succ --- diff --git a/src/lib/iso_ext.pl b/src/lib/iso_ext.pl index afc28969..deccb345 100644 --- a/src/lib/iso_ext.pl +++ b/src/lib/iso_ext.pl @@ -14,6 +14,7 @@ but they're not part of the ISO Prolog standard at the moment. partial_string/3, partial_string_tail/2, setup_call_cleanup/3, + succ/2, call_nth/2, countall/2, copy_term_nat/2, @@ -112,6 +113,23 @@ bb_get(Key, Value) :- ). +%% succ(?I, ?S). +% +% True iff S is the successor of the non-negative integer I. +% At least one of the arguments must be instantiated. + +succ(I, S) :- + can_be(not_less_than_zero, I), + can_be(not_less_than_zero, S), + ( integer(I) -> + S is I+1 + ; integer(S) -> + S > 0, + I is S-1 + ; instantiation_error(succ/2) + ). + + % setup_call_cleanup. :- meta_predicate(call_cleanup(0, 0)).