From d4b9a1e45899f86dbb9d5bef1f53fffa9dc05d44 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Thu, 20 Nov 2014 19:59:50 -0800 Subject: * 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. --- ChangeLog | 10 ++++++++++ arith.c | 30 ++++++++++++++++++++++++++++++ eval.c | 6 ++++++ lib.h | 6 ++++++ txr.1 | 32 ++++++++++++++++++++++++++++++++ 5 files changed, 84 insertions(+) diff --git a/ChangeLog b/ChangeLog index dc9fa90c..ca96b0de 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2014-11-20 Kaz Kylheku + + * 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 * lib.c (where): Argument order reversed, with compat support. diff --git a/arith.c b/arith.c index 5d4cdada..23cf66a8 100644 --- a/arith.c +++ b/arith.c @@ -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: diff --git a/eval.c b/eval.c index dea40264..ab11ebef 100644 --- a/eval.c +++ b/eval.c @@ -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)); diff --git a/lib.h b/lib.h index c4c2d5ff..80a56c14 100644 --- a/lib.h +++ b/lib.h @@ -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); diff --git a/txr.1 b/txr.1 index 001f7b00..fd1e1822 100644 --- a/txr.1 +++ b/txr.1 @@ -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 *) -- cgit v1.2.3