diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | arith.c | 30 | ||||
-rw-r--r-- | eval.c | 6 | ||||
-rw-r--r-- | lib.h | 6 | ||||
-rw-r--r-- | txr.1 | 32 |
5 files changed, 84 insertions, 0 deletions
@@ -1,5 +1,15 @@ 2014-11-20 Kaz Kylheku <kaz@kylheku.com> + * arith.c (succ, ssucc, sssucc, pred, ppred, pppred): New functions. + + * eval.c (eval_init): Register new functions as intrinsics. + + * lib.h (succ, ssucc, sssucc, pred, ppred, pppred): Declared. + + * txr.1: Documented. + +2014-11-20 Kaz Kylheku <kaz@kylheku.com> + * lib.c (where): Argument order reversed, with compat support. * lib.h (where): Declaration updated. @@ -1011,6 +1011,36 @@ val oddp(val num) } } +val succ(val num) +{ + return plus(num, one); +} + +val ssucc(val num) +{ + return plus(num, two); +} + +val sssucc(val num) +{ + return plus(num, three); +} + +val pred(val num) +{ + return minus(num, one); +} + +val ppred(val num) +{ + return minus(num, two); +} + +val pppred(val num) +{ + return minus(num, three); +} + val gt(val anum, val bnum) { tail: @@ -3709,6 +3709,12 @@ void eval_init(void) reg_fun(intern(lit("zerop"), user_package), func_n1(zerop)); reg_fun(intern(lit("evenp"), user_package), func_n1(evenp)); reg_fun(intern(lit("oddp"), user_package), func_n1(oddp)); + reg_fun(intern(lit("succ"), user_package), func_n1(succ)); + reg_fun(intern(lit("ssucc"), user_package), func_n1(ssucc)); + reg_fun(intern(lit("sssucc"), user_package), func_n1(sssucc)); + reg_fun(intern(lit("pred"), user_package), func_n1(pred)); + reg_fun(intern(lit("ppred"), user_package), func_n1(ppred)); + reg_fun(intern(lit("pppred"), user_package), func_n1(pppred)); reg_fun(intern(lit(">"), user_package), func_n1v(gtv)); reg_fun(intern(lit("<"), user_package), func_n1v(ltv)); reg_fun(intern(lit(">="), user_package), func_n1v(gev)); @@ -542,6 +542,12 @@ val divi(val anum, val bnum); val zerop(val num); val evenp(val num); val oddp(val num); +val succ(val num); +val ssucc(val num); +val sssucc(val num); +val pred(val num); +val ppred(val num); +val pppred(val num); val gt(val anum, val bnum); val lt(val anum, val bnum); val ge(val anum, val bnum); @@ -18434,6 +18434,38 @@ is not divisible by two (odd), otherwise it returns .codn nil . +.coNP Functions @, succ @, ssucc @, sssucc @, pred @, ppred @ and pppred +.synb +.mets (succ << number ) +.mets (ssucc << number ) +.mets (sssucc << number ) +.mets (pred << number ) +.mets (ppred << number ) +.mets (pppred << number ) +.syne +.desc +The +.code succ +function adds 1 to its argument and returns the resulting value. +If the argument is an integer, then the return value is the successor +of that integer, and if it is a character, then the return value +is the successor of that character according to Unicode. + +The +.code pred +function subtracts 1 from its argument, and under similar considerations +as above, the result represents the predecessor. + +The +.code ssucc +and +.code sssucc +functions add 2 and 3, respectively. Similarly, +.code ppred +and +.code pppred +subtract 2 and 3 from their argument. + .coNP Functions @, > @, < @, >= @ <= and @ = .synb .mets (> < number << number *) |