:- object(integer, extends(number)). :- info([ version is 1.1, author is 'Paulo Moura', date is 2007/4/20, comment is 'Integer data type predicates.']). :- public(between/3). :- mode(between(+integer, +integer, +integer), zero_or_one). :- mode(between(+integer, +integer, -integer), zero_or_more). :- info(between/3, [ comment is 'Returns integers in the interval defined by the two first arguments.', argnames is ['Lower', 'Upper', 'Integer']]). between(Lower, Upper, Integer) :- integer(Lower), integer(Upper), ( var(Integer) -> Lower =< Upper, generate(Lower, Upper, Integer) ; integer(Integer), Lower =< Integer, Integer =< Upper ). generate(Lower, _, Lower). generate(Lower, Upper, Integer) :- Lower < Upper, Next is Lower + 1, generate(Next, Upper, Integer). valid(Integer) :- integer(Integer). :- end_object.