diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2015-01-25 08:39:15 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2015-01-25 08:39:15 -0800 |
commit | 4ec024cdc9544c244cbd8b630e8f631fc05c6075 (patch) | |
tree | 734ab15e190ec426499c25cc00a79045b92d2fc2 | |
parent | 6c9893d4790f1a27c900b2d84a3532ae7c402463 (diff) | |
download | txr-4ec024cdc9544c244cbd8b630e8f631fc05c6075.tar.gz txr-4ec024cdc9544c244cbd8b630e8f631fc05c6075.tar.bz2 txr-4ec024cdc9544c244cbd8b630e8f631fc05c6075.zip |
* eval.c (eval_init): Register dupl and swap_12_21 as
the dup and flip intrinsics.
* lib.c (do_dup): New static function.
(dupl): New function.
* lib.h (dupl): Declared.
* txr.1: Documented dup and flip.
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | eval.c | 2 | ||||
-rw-r--r-- | lib.c | 10 | ||||
-rw-r--r-- | lib.h | 1 | ||||
-rw-r--r-- | txr.1 | 31 |
5 files changed, 56 insertions, 0 deletions
@@ -1,3 +1,15 @@ +2015-01-25 Kaz Kylheku <kaz@kylheku.com> + + * eval.c (eval_init): Register dupl and swap_12_21 as + the dup and flip intrinsics. + + * lib.c (do_dup): New static function. + (dupl): New function. + + * lib.h (dupl): Declared. + + * txr.1: Documented dup and flip. + 2015-01-24 Kaz Kylheku <kaz@kylheku.com> * eval.c (callf): New static function. @@ -3903,6 +3903,8 @@ void eval_init(void) reg_fun(intern(lit("notf"), user_package), func_n1(notf)); reg_fun(intern(lit("iff"), user_package), func_n3o(iff, 1)); reg_fun(intern(lit("iffi"), user_package), func_n3o(iffi, 2)); + reg_fun(intern(lit("dup"), user_package), func_n1(dupl)); + reg_fun(intern(lit("flip"), user_package), func_n1(swap_12_21)); reg_fun(intern(lit("if"), user_package), func_n3o(if_fun, 2)); reg_fun(intern(lit("or"), user_package), func_n0v(or_fun)); reg_fun(intern(lit("and"), user_package), func_n0v(and_fun)); @@ -4756,6 +4756,16 @@ val iffi(val condfun, val thenfun, val elsefun) return func_f0v(cons(condfun, cons(thenfun, elsefun)), do_iff); } +static val do_dup(val fun, val arg) +{ + return funcall2(fun, arg, arg); +} + +val dupl(val fun) +{ + return func_f1(fun, do_dup); +} + val vector(val length, val initval) { int i; @@ -758,6 +758,7 @@ val orv(val funlist); val notf(val fun); val iff(val condfun, val thenfun, val elsefun); val iffi(val condfun, val thenfun, val elsefun); +val dupl(val fun); val swap_12_21(val fun); val vector(val length, val initval); val vectorp(val vec); @@ -20990,6 +20990,37 @@ and the expression returns a function similar to .codn (lambda (. rest) 42) . +.coNP Function @ dup +.synb +.mets (dup << func ) +.syne +.desc +The +.code dup +function returns a one-argument function which calls the two-argument +function +.metn func +by duplicating its argument. + +.TP* Example: + +.cblk + ;; square the elements of a list + (mapcar [dup *] '(1 2 3)) -> (1 4 9) +.cble + +.coNP Function @ flip +.synb +.mets (flip << func ) +.syne +.desc +The +.code flip +function returns a two-argument function which calls the two-argument +function +.metn func +with reversed arguments. + .coNP Functions @ chain and @ chand .synb .mets (chain << func *) |