diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2015-07-24 05:11:31 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2015-07-24 05:11:31 -0700 |
commit | 2f654aa0a794581bb857c38e99e0abb185c53d52 (patch) | |
tree | 51007fa2671f092c2d89c42ed6797d913907693b | |
parent | e65fc7cc213436bba321a9b616bb77874b2a789a (diff) | |
download | txr-2f654aa0a794581bb857c38e99e0abb185c53d52.tar.gz txr-2f654aa0a794581bb857c38e99e0abb185c53d52.tar.bz2 txr-2f654aa0a794581bb857c38e99e0abb185c53d52.zip |
Refactoring n-ary functions to use a single helper.
* lib.c (nary_op): New function.
(plusv, mulv, logandv, logiorv): Use nary_op.
* lib.h (nary_op): Declared.
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | lib.c | 33 | ||||
-rw-r--r-- | lib.h | 1 |
3 files changed, 23 insertions, 20 deletions
@@ -1,3 +1,12 @@ +2015-06-24 Kaz Kylheku <kaz@kylheku.com> + + Refactoring n-ary functions to use a single helper. + + * lib.c (nary_op): New function. + (plusv, mulv, logandv, logiorv): Use nary_op. + + * lib.h (nary_op): Declared. + 2015-06-23 Kaz Kylheku <kaz@kylheku.com> Hash subset testing. @@ -2074,13 +2074,18 @@ val numberp(val num) } } +val nary_op(val (*cfunc)(val, val), val args, val emptyval) +{ + if (!args) + return emptyval; + else if (!cdr(args)) + return car(args); + return reduce_left(func_n2(cfunc), cdr(args), car(args), nil); +} + val plusv(val nlist) { - if (!nlist) - return num(0); - else if (!cdr(nlist)) - return car(nlist); - return reduce_left(func_n2(plus), cdr(nlist), car(nlist), nil); + return nary_op(plus, nlist, zero); } val minusv(val minuend, val nlist) @@ -2092,29 +2097,17 @@ val minusv(val minuend, val nlist) val mulv(val nlist) { - if (!nlist) - return one; - else if (!cdr(nlist)) - return car(nlist); - return reduce_left(func_n2(mul), cdr(nlist), car(nlist), nil); + return nary_op(mul, nlist, one); } val logandv(val nlist) { - if (!nlist) - return negone; - else if (!cdr(nlist)) - return car(nlist); - return reduce_left(func_n2(logand), cdr(nlist), car(nlist), nil); + return nary_op(logand, nlist, negone); } val logiorv(val nlist) { - if (!nlist) - return zero; - else if (!cdr(nlist)) - return car(nlist); - return reduce_left(func_n2(logior), cdr(nlist), car(nlist), nil); + return nary_op(logior, nlist, zero); } val gtv(val first, val rest) @@ -536,6 +536,7 @@ val bignump(val num); val floatp(val num); val integerp(val num); val numberp(val num); +val nary_op(val (*cfunc)(val, val), val args, val emptyval); val plus(val anum, val bnum); val plusv(val nlist); val minus(val anum, val bnum); |