Changeset 4488 for trunk/library

Show
Ignore:
Timestamp:
10/05/08 14:08:31 (3 months ago)
Author:
pmoura
Message:

Added predicates plus/3 and succ/2 to the library object "integer".

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/library/integer.lgt

    r3565 r4488  
    44 
    55    :- info([ 
    6         version is 1.1, 
     6        version is 1.2, 
    77        author is 'Paulo Moura', 
    8         date is 2007/4/20, 
     8        date is 2008/10/5, 
    99        comment is 'Integer data type predicates.']). 
    1010 
     
    1515        comment is 'Returns integers in the interval defined by the two first arguments.', 
    1616        argnames is ['Lower', 'Upper', 'Integer']]). 
     17 
     18    :- public(plus/3). 
     19    :- mode(plus(+integer, +integer, ?integer), zero_or_one). 
     20    :- mode(plus(+integer, ?integer, +integer), zero_or_one). 
     21    :- mode(plus(?integer, +integer, +integer), zero_or_one). 
     22    :- info(plus/3, [ 
     23        comment is 'Reversible integer sum. At least two of the arguments must be instantiated to integers.', 
     24        argnames is ['I', 'J', 'Sum']]). 
     25 
     26    :- public(succ/2). 
     27    :- mode(succ(+integer, ?integer), zero_or_one). 
     28    :- mode(succ(?integer, +integer), zero_or_one). 
     29    :- info(plus/2, [ 
     30        comment is 'Successor of a natural number. At least one of the arguments must be instantiated to a natural number.', 
     31        argnames is ['I', 'J']]). 
    1732 
    1833    between(Lower, Upper, Integer) :- 
     
    3348        generate(Next, Upper, Integer). 
    3449 
     50    plus(I, J, Sum) :- 
     51        integer(I), 
     52        integer(J), !, 
     53        Sum is I + J. 
     54    plus(I, J, Sum) :- 
     55        integer(I), 
     56        integer(Sum), !, 
     57        J is Sum - I. 
     58    plus(I, J, Sum) :- 
     59        integer(J), 
     60        integer(Sum), !, 
     61        I is Sum - J. 
     62 
     63    succ(I, J) :- 
     64        integer(I), !, 
     65        I >= 0, 
     66        J is I + 1. 
     67    succ(I, J) :- 
     68        integer(J), 
     69        (   J =:= 0 -> 
     70            fail 
     71        ;   J > 0, 
     72            I is J - 1 
     73        ). 
     74 
    3575    valid(Integer) :- 
    3676        integer(Integer).