Bug fix: wrong simplifications of (assoc ... (assoc ...

This commit is contained in:
Lukasz Kozuchowski 2015-04-11 12:47:07 +02:00
parent 5977fef261
commit 93f46582b3
2 changed files with 9 additions and 4 deletions

View file

@ -5,9 +5,9 @@
;;vector
[(conj [] . ?x) (vector . ?x)]
[(into [] ?coll) (vec ?coll)]
[(assoc ?coll ?key (assoc (?key0 ?coll) ?key1 ?val)) (assoc-in ?coll [?key0 ?key1] ?val)]
[(assoc ?coll ?key (assoc (?coll ?key0) ?key1 ?val)) (assoc-in ?coll [?key0 ?key1] ?val)]
[(assoc ?coll ?key (assoc (get ?coll ?key0) ?key1 ?val)) (assoc-in ?coll [?key0 ?key1] ?val)]
[(assoc ?coll ?key0 (assoc (?key0 ?coll) ?key1 ?val)) (assoc-in ?coll [?key0 ?key1] ?val)]
[(assoc ?coll ?key0 (assoc (?coll ?key0) ?key1 ?val)) (assoc-in ?coll [?key0 ?key1] ?val)]
[(assoc ?coll ?key0 (assoc (get ?coll ?key0) ?key1 ?val)) (assoc-in ?coll [?key0 ?key1] ?val)]
[(assoc ?coll ?key (?fn (?key ?coll) . ?args)) (update-in ?coll [?key] ?fn . ?args)]
[(assoc ?coll ?key (?fn (?coll ?key) . ?args)) (update-in ?coll [?key] ?fn . ?args)]
[(assoc ?coll ?key (?fn (get ?coll ?key) . ?args)) (update-in ?coll [?key] ?fn . ?args)]

View file

@ -22,4 +22,9 @@
'(update-in coll [k] f a b c) '(assoc coll k (f (coll k) a b c))
'(update-in coll [k] f a b c) '(assoc coll k (f (get coll k) a b c))
'(assoc-in coll [k1 k2] v) '(update-in coll [k1 k2] assoc v)
'(repeatedly 10 (constantly :foo)) '(take 10 (repeatedly (constantly :foo)))))
'(repeatedly 10 (constantly :foo)) '(take 10 (repeatedly (constantly :foo)))
;; some wrong simplifications happened in the past:
nil '(assoc coll k (assoc (coll k0) k1 a))
nil '(assoc coll k (assoc (get coll k0) k1 a))
nil '(assoc coll k (assoc (k0 coll) k1 a))))