]> gitweb.factorcode.org Git - factor.git/commitdiff
assocs.extras: adding assoc-merge.
authorJohn Benediktsson <mrjbq7@gmail.com>
Sun, 24 Mar 2013 16:56:55 +0000 (09:56 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sun, 24 Mar 2013 19:26:30 +0000 (12:26 -0700)
extra/assocs/extras/extras-tests.factor
extra/assocs/extras/extras.factor

index 951aebe5fb4005e41b527eb0431dfca3ad0324b3..8cd957e601fac8acc2ce150bb14faaf5f8263d97 100644 (file)
@@ -15,3 +15,10 @@ IN: assocs.extras
 { H{ { 1 3 } { 2 4 } } } [ { 1 2 } { 3 4 } H{ } zip-as ] unit-test
 
 { H{ { 2 1 } { 4 3 } } } [ H{ { 1 2 } { 3 4 } } assoc-invert ] unit-test
+
+[ H{ } ] [ { } assoc-merge ] unit-test
+[ H{ { "a" V{ 2 5 } } { "b" V{ 3 } } { "c" V{ 10 } } } ]
+[
+    { H{ { "a" 2 } { "b" 3 } } H{ { "a" 5 } { "c" 10 } } }
+    assoc-merge
+] unit-test
index 21d0044c516391c49b5ba3ed1ef2badc1059a32b..ffdf53845d54b79cedc2de7076253cc5841ce199 100644 (file)
@@ -43,3 +43,9 @@ IN: assocs.extras
 
 : assoc-invert ( assoc -- newassoc )
     dup assoc-invert-as ;
+
+: (assoc-merge) ( assoc1 assoc2 -- assoc1 )
+    over [ push-at ] with-assoc assoc-each ;
+
+: assoc-merge ( seq -- merge )
+    H{ } clone [ (assoc-merge) ] reduce ;