summaryrefslogtreecommitdiffstats
path: root/lib.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2021-12-22 07:21:26 -0800
committerKaz Kylheku <kaz@kylheku.com>2021-12-22 07:21:26 -0800
commite2ff7c1811deb19d0dab2142b99cfcb4b30e62df (patch)
tree25dcd25d5a48f60fc8c372865329027248268422 /lib.c
parent638293d5281db1276a3b64f2eb969ad99c0ee9f3 (diff)
downloadtxr-e2ff7c1811deb19d0dab2142b99cfcb4b30e62df.tar.gz
txr-e2ff7c1811deb19d0dab2142b99cfcb4b30e62df.tar.bz2
txr-e2ff7c1811deb19d0dab2142b99cfcb4b30e62df.zip
The pairlis function comes to TXR Lisp.
* eval.c (eval_init): Register pairlis intrinsic. * lib.c, lib.h (pairlis): New function. * tests/012/seq.tl: New test cases. * txr.1: Documented. * stdlib/doc-syms.tl: Updated.
Diffstat (limited to 'lib.c')
-rw-r--r--lib.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/lib.c b/lib.c
index cce37b3a..a82bdea7 100644
--- a/lib.c
+++ b/lib.c
@@ -10103,6 +10103,25 @@ val copy_alist(val list)
return out;
}
+val pairlis(val keys, val values, val alist_in)
+{
+ val self = lit("pairlis");
+ val alist = default_null_arg(alist_in);
+ seq_iter_t sik, siv;
+ val key, value;
+ list_collect_decl (out, ptail);
+
+ seq_iter_init(self, &sik, keys);
+ seq_iter_init(self, &siv, values);
+
+ while (seq_get(&sik, &key) && seq_get(&siv, &value))
+ ptail = list_collect(ptail, cons(key, value));
+
+ list_collect_nconc(ptail, alist);
+
+ return out;
+}
+
val mapcar_listout(val fun, val seq)
{
val self = lit("mapcar");