diff options
Diffstat (limited to 'hash.c')
-rw-r--r-- | hash.c | 15 |
1 files changed, 15 insertions, 0 deletions
@@ -1195,6 +1195,20 @@ val hash_from_pairs_v(val pairs, struct args *hashv_args) return hash_construct(args_get_list(hashv_args), pairs); } +val hash_from_alist_v(val alist, struct args *hashv_args) +{ + val hash = hashv(hashv_args); + + alist = nullify(alist); + + for (; alist; alist = cdr(alist)) { + val pair = car(alist); + sethash(hash, car(pair), cdr(pair)); + } + + return hash; +} + val hash_list(val keys, struct args *hashv_args) { val hash = hashv(hashv_args); @@ -1598,6 +1612,7 @@ void hash_init(void) reg_fun(intern(lit("hash"), user_package), func_n0v(hashv)); reg_fun(hash_construct_s, func_n2(hash_construct)); 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("gethash"), user_package), func_n3o(gethash_n, 2)); reg_fun(intern(lit("inhash"), user_package), func_n3o(inhash, 2)); |