summaryrefslogtreecommitdiffstats
path: root/hash.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2019-07-17 07:36:28 -0700
committerKaz Kylheku <kaz@kylheku.com>2019-07-17 07:36:28 -0700
commite6dcc43d8bd7abd55de302d2599ce564ea2c9d78 (patch)
tree26843d2e8234d26cf9b3c1a01ae534a1d784a1c5 /hash.c
parent81c97fcb7736ee17d581d6c78af567e2f7d25ca0 (diff)
downloadtxr-e6dcc43d8bd7abd55de302d2599ce564ea2c9d78.tar.gz
txr-e6dcc43d8bd7abd55de302d2599ce564ea2c9d78.tar.bz2
txr-e6dcc43d8bd7abd55de302d2599ce564ea2c9d78.zip
New function: hash-zip.
* hash.c (hash_zip): New function. (hash_init): hash-zip intrinsic registered. * hash.h (hash_zip): Declared. * txr.1: Documented.
Diffstat (limited to 'hash.c')
-rw-r--r--hash.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/hash.c b/hash.c
index 0d8aaef9..eb257f95 100644
--- a/hash.c
+++ b/hash.c
@@ -1249,6 +1249,22 @@ val hash_list(val keys, struct args *hashv_args)
return hash;
}
+val hash_zip(val keys, val vals, struct args *hashv_args)
+{
+ val self = lit("hash-zip");
+ seq_iter_t key_iter, val_iter;
+ val k, v;
+ val hash = hashv(hashv_args);
+
+ seq_iter_init(self, &key_iter, keys);
+ seq_iter_init(self, &val_iter, vals);
+
+ while (seq_get(&key_iter, &k) && seq_get(&val_iter, &v))
+ sethash(hash, k, v);
+
+ return hash;
+}
+
val group_by(val func, val seq, struct args *hashv_args)
{
val self = lit("group-by");
@@ -1642,6 +1658,7 @@ void hash_init(void)
reg_fun(intern(lit("hash-from-pairs"), user_package), func_n1v(hash_from_pairs_v));
reg_fun(intern(lit("hash-from-alist"), user_package), func_n1v(hash_from_alist_v));
reg_fun(intern(lit("hash-list"), user_package), func_n1v(hash_list));
+ reg_fun(intern(lit("hash-zip"), user_package), func_n2v(hash_zip));
reg_fun(intern(lit("gethash"), user_package), func_n3o(gethash_n, 2));
reg_fun(intern(lit("inhash"), user_package), func_n3o(inhash, 2));
reg_fun(intern(lit("sethash"), user_package), func_n3(sethash));