From 89db88c88083aaabba412662d9da10102f519b8d Mon Sep 17 00:00:00 2001 From: Andrey Orst Date: Mon, 26 Oct 2020 22:51:21 +0300 Subject: feature(core): add assoc function & test --- core.fnl | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'core.fnl') diff --git a/core.fnl b/core.fnl index fc072ed..0be0a48 100644 --- a/core.fnl +++ b/core.fnl @@ -353,6 +353,21 @@ oppisite truth value." (fn inc [x] (+ x 1)) (fn dec [x] (- x 1)) + +(fn* assoc + "Associate key `k' with value `v' in associative `tbl'." + ([tbl k v] (doto tbl (tset k v))) + ([tbl k v & kvs] + (tset tbl k v) + (assert (zero? (% (length kvs) 2)) "expected even amount key-value args") + (var [i k v] [1 nil nil]) + (var (i k) (next kvs)) + (while i + (set (i v) (next kvs i)) + (tset tbl k v) + (set (i k) (next kvs i))) + tbl)) + {: apply : seq : first @@ -390,4 +405,4 @@ oppisite truth value." : reverse : inc : dec - } + : assoc} -- cgit v1.2.3