]> gitweb.factorcode.org Git - factor.git/commitdiff
assocs.extras: adding zip-longest
authorJohn Benediktsson <mrjbq7@gmail.com>
Sun, 22 Jan 2023 16:59:28 +0000 (08:59 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sun, 22 Jan 2023 16:59:28 +0000 (08:59 -0800)
extra/assocs/extras/extras-tests.factor
extra/assocs/extras/extras.factor

index 0ea413f86ad3d6c7a28a3624b2aa57936dac2021..22e7ec8f1700a55b5360376cbc99192e7515e4c9 100644 (file)
@@ -21,6 +21,14 @@ USING: arrays assocs.extras kernel math math.order sequences tools.test ;
     H{ { 1 H{ { 2 H{ { 3 4 } } } } } } dup { 1 2 3 } 40 deep-set-of
 ] unit-test
 
+{ { { 1 1 } { 2 2 } { 0 3 } { 0 4 } { 0 5 } } } [
+    { 1 2 } { 1 2 3 4 5 } 0 zip-longest-with
+] unit-test
+
+{ { { 1 1 } { 2 2 } { f 3 } { f 4 } { f 5 } } } [
+    { 1 2 } { 1 2 3 4 5 } zip-longest
+] unit-test
+
 { H{ { 2 1 } { 4 3 } } } [ H{ { 1 2 } { 3 4 } } assoc-invert ] unit-test
 
 { H{ { "a" V{ 2 5 } } { "b" V{ 3 } } { "c" V{ 10 } } } }
index 41dc38bef6359aa05d20e98bfddb5a847d40e427..f6d18c1ba88daf1ec43f62412dc49b1d941d3bb4 100644 (file)
@@ -19,6 +19,12 @@ IN: assocs.extras
 : deep-set-of ( assoc seq elt -- )
     [ deep-of-but-last ] dip spin set-at ; inline
 
+: zip-longest-with ( seq1 seq2 fill -- assoc )
+    [ 2dup max-length ] dip '[ _ _ pad-tail ] bi@ zip ;
+
+: zip-longest ( seq1 seq2 -- assoc )
+    f zip-longest-with ;
+
 : substitute! ( seq assoc -- seq )
     substituter map! ;