diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2019-07-17 07:36:28 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2019-07-17 07:36:28 -0700 |
commit | e6dcc43d8bd7abd55de302d2599ce564ea2c9d78 (patch) | |
tree | 26843d2e8234d26cf9b3c1a01ae534a1d784a1c5 /hash.c | |
parent | 81c97fcb7736ee17d581d6c78af567e2f7d25ca0 (diff) | |
download | txr-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.c | 17 |
1 files changed, 17 insertions, 0 deletions
@@ -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)); |