summaryrefslogtreecommitdiffstats
path: root/lib.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2024-02-02 19:30:15 -0800
committerKaz Kylheku <kaz@kylheku.com>2024-02-02 19:30:15 -0800
commitafec17f4310c5eaaa326aacab2d5bb18cafd315c (patch)
tree867cf4c8afd1d20e6796d66f20a1b70ce2faae6e /lib.c
parentfb8b7312de0fa42fe9b544aca54d1ee05518bf40 (diff)
downloadtxr-afec17f4310c5eaaa326aacab2d5bb18cafd315c.tar.gz
txr-afec17f4310c5eaaa326aacab2d5bb18cafd315c.tar.bz2
txr-afec17f4310c5eaaa326aacab2d5bb18cafd315c.zip
New function: hist-sort-by.
* eval.c (eval_init): Register hist-sort-by intrinsic. * lib.c (hist_sort_by): New function. (hist_sort): Wrapper for hist_sort_by now. * lib.h (hist_sort_by): Declared. * tests/012/sort.tl: Tests. * txr.1: Documented.
Diffstat (limited to 'lib.c')
-rw-r--r--lib.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/lib.c b/lib.c
index c5722241..e1ca5e9e 100644
--- a/lib.c
+++ b/lib.c
@@ -11600,14 +11600,19 @@ static val hist_succ(val left, val right)
return succ(left);
}
-val hist_sort(val seq, varg hashv_args)
+val hist_sort_by(val fun, val seq, varg hashv_args)
{
val hash = group_reduce(hashv(hashv_args),
- identity_f, hist_succ_f,
+ fun, hist_succ_f,
seq, zero, nil);
return nsort(hash_alist(hash), gt_f, cdr_f);
}
+val hist_sort(val seq, varg hashv_args)
+{
+ return hist_sort_by(identity_f, seq, hashv_args);
+}
+
val nrot(val seq, val n_in)
{
val len = length(seq);