diff options
| -rw-r--r-- | core.fnl | 17 | ||||
| -rw-r--r-- | core_test.fnl | 8 |
2 files changed, 22 insertions, 3 deletions
@@ -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} diff --git a/core_test.fnl b/core_test.fnl index 38ce135..0367ae2 100644 --- a/core_test.fnl +++ b/core_test.fnl @@ -39,7 +39,8 @@ : range : reverse : inc - : dec} + : dec + : assoc} (require :core)) (deftest equality @@ -241,7 +242,10 @@ (assert-eq (rest {:a 1}) [])) (testing reduce-kv - (assert-eq (reduce-kv #(+ $1 $3) 0 {:a 1 :b 2 :c 3}) 6))) + (assert-eq (reduce-kv #(+ $1 $3) 0 {:a 1 :b 2 :c 3}) 6)) + + (testing assoc + (assert-eq (assoc {} :a 1 :b 2 :c 3 :d 4) {:a 1 :b 2 :c 3 :d 4}))) (deftest function-manipulation (testing constantly |