summaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2024-07-30 08:11:02 -0700
committerKaz Kylheku <kaz@kylheku.com>2024-07-30 08:11:02 -0700
commitaf0cf3c74a55872b259a1a3f2f0bc604d2aa12e5 (patch)
tree2bbe7c1956085599141847470bdbef7de04adc3f /eval.c
parentcdbd2695fc3896034562aab2e47b3476dc401077 (diff)
downloadtxr-af0cf3c74a55872b259a1a3f2f0bc604d2aa12e5.tar.gz
txr-af0cf3c74a55872b259a1a3f2f0bc604d2aa12e5.tar.bz2
txr-af0cf3c74a55872b259a1a3f2f0bc604d2aa12e5.zip
keep-if, remove-if, keep-keys-if: mapfun argument.
We introduce a mapfun argument to these functions so that they can additionally transform the accumulated values. The keep-keys-if function is now implemented through the same helper function as keep-if but with the mapfun argument defaulting to a copy of the keyfun argument. * eval.c (eval_init): Update registrations of remove-if, keep-if and keep-keys-if to new arities of C functions. * lib.c (rem_if_impl): Implement new optional mapfun parameter. (remove_if, keep_if): Add mapfun parameter. (keep_keys_if): Implement via rem_if_impl, and add mapfun argument. We do the defaulting of keyfun here, so that we can then use that argument's value to default mapfun. * lib.h (remove_if, keep_if, keep_keys_if): Declarations updated. * tests/012/seq.tl: Couple of test cases exercising mapfun argument of keep-if and remove-if. * txr.1: Documented.
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/eval.c b/eval.c
index 066e1c1c..c1bb2c51 100644
--- a/eval.c
+++ b/eval.c
@@ -7428,12 +7428,12 @@ void eval_init(void)
reg_fun(intern(lit("remq"), user_package), func_n3o(remq, 2));
reg_fun(intern(lit("remql"), user_package), func_n3o(remql, 2));
reg_fun(intern(lit("remqual"), user_package), func_n3o(remqual, 2));
- reg_fun(intern(lit("remove-if"), user_package), func_n3o(remove_if, 2));
+ reg_fun(intern(lit("remove-if"), user_package), func_n4o(remove_if, 2));
reg_fun(intern(lit("keepq"), user_package), func_n3o(keepq, 2));
reg_fun(intern(lit("keepql"), user_package), func_n3o(keepql, 2));
reg_fun(intern(lit("keepqual"), user_package), func_n3o(keepqual, 2));
- reg_fun(intern(lit("keep-if"), user_package), func_n3o(keep_if, 2));
- reg_fun(intern(lit("keep-keys-if"), user_package), func_n3o(keep_keys_if, 2));
+ reg_fun(intern(lit("keep-if"), user_package), func_n4o(keep_if, 2));
+ reg_fun(intern(lit("keep-keys-if"), user_package), func_n4o(keep_keys_if, 2));
reg_fun(intern(lit("separate"), user_package), func_n3o(separate, 2));
reg_fun(intern(lit("separate-keys"), user_package), func_n3o(separate_keys, 2));
reg_fun(intern(lit("remq*"), user_package), func_n2(remq_lazy));