root/tags/lgt2310/library/integer.lgt

Revision 3565, 0.9 KB (checked in by pmoura, 21 months ago)

Split mode directive of between/3 in two more specific ones.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1
2:- object(integer,
3    extends(number)).
4
5    :- info([
6        version is 1.1,
7        author is 'Paulo Moura',
8        date is 2007/4/20,
9        comment is 'Integer data type predicates.']).
10
11    :- public(between/3).
12    :- mode(between(+integer, +integer, +integer), zero_or_one).
13    :- mode(between(+integer, +integer, -integer), zero_or_more).
14    :- info(between/3, [
15        comment is 'Returns integers in the interval defined by the two first arguments.',
16        argnames is ['Lower', 'Upper', 'Integer']]).
17
18    between(Lower, Upper, Integer) :-
19        integer(Lower),
20        integer(Upper),
21        (   var(Integer) ->
22            Lower =< Upper,
23            generate(Lower, Upper, Integer)
24        ;   integer(Integer),
25            Lower =< Integer,
26            Integer =< Upper
27        ).
28
29    generate(Lower, _, Lower).
30    generate(Lower, Upper, Integer) :-
31        Lower < Upper,
32        Next is Lower + 1,
33        generate(Next, Upper, Integer).
34
35    valid(Integer) :-
36        integer(Integer).
37
38:- end_object.
Note: See TracBrowser for help on using the browser.