assocs: Make the output from zip, zip-index, and map-index the same type as the first seq/assoc argument. Add tests.

db4
Doug Coleman 2014-11-08 18:26:21 -08:00
parent 7cfa9d9518
commit 45e7fd7921
2 changed files with 15 additions and 3 deletions

View File

@ -218,6 +218,10 @@ unit-test
{ 11 23 35 } { 11 23 35 }
} [ { 11 22 33 } [ + ] map-index ] unit-test } [ { 11 22 33 } [ + ] map-index ] unit-test
{
V{ 11 23 35 }
} [ V{ 11 22 33 } [ + ] map-index ] unit-test
{ {
V{ 11 23 35 } V{ 11 23 35 }
} [ { 11 22 33 } [ + ] V{ } map-index-as ] unit-test } [ { 11 22 33 } [ + ] V{ } map-index-as ] unit-test
@ -235,6 +239,10 @@ unit-test
{ { 1 4 } { 2 5 } { 3 6 } } { { 1 4 } { 2 5 } { 3 6 } }
} [ { 1 2 3 } { 4 5 6 } zip ] unit-test } [ { 1 2 3 } { 4 5 6 } zip ] unit-test
{
V{ { 1 4 } { 2 5 } { 3 6 } }
} [ V{ 1 2 3 } { 4 5 6 } zip ] unit-test
{ {
{ { 1 4 } { 2 5 } { 3 6 } } { { 1 4 } { 2 5 } { 3 6 } }
} [ { 1 2 3 } { 4 5 6 } { } zip-as ] unit-test } [ { 1 2 3 } { 4 5 6 } { } zip-as ] unit-test
@ -267,6 +275,10 @@ unit-test
{ { 11 0 } { 22 1 } { 33 2 } } { { 11 0 } { 22 1 } { 33 2 } }
} [ { 11 22 33 } zip-index ] unit-test } [ { 11 22 33 } zip-index ] unit-test
{
V{ { 11 0 } { 22 1 } { 33 2 } }
} [ V{ 11 22 33 } zip-index ] unit-test
{ {
{ { 11 0 } { 22 1 } { 33 2 } } { { 11 0 } { 22 1 } { 33 2 } }
} [ { 11 22 33 } { } zip-index-as ] unit-test } [ { 11 22 33 } { } zip-index-as ] unit-test

View File

@ -207,7 +207,7 @@ M: assoc value-at* swap [ = nip ] curry assoc-find nip ;
] if ; inline ] if ; inline
: zip ( keys values -- alist ) : zip ( keys values -- alist )
{ } zip-as ; inline over zip-as ; inline
: map-index-as ( ... seq quot: ( ... elt index -- ... newelt ) exemplar -- ... obj ) : map-index-as ( ... seq quot: ( ... elt index -- ... newelt ) exemplar -- ... obj )
dup sequence? [ dup sequence? [
@ -219,13 +219,13 @@ M: assoc value-at* swap [ = nip ] curry assoc-find nip ;
] if ; inline ] if ; inline
: map-index ( ... seq quot: ( ... elt index -- ... newelt ) -- ... newseq ) : map-index ( ... seq quot: ( ... elt index -- ... newelt ) -- ... newseq )
{ } map-index-as ; inline over map-index-as ; inline
: zip-index-as ( values exemplar -- obj ) : zip-index-as ( values exemplar -- obj )
[ [ 2array ] ] dip map-index-as ; inline [ [ 2array ] ] dip map-index-as ; inline
: zip-index ( values -- alist ) : zip-index ( values -- alist )
{ } zip-index-as ; inline dup zip-index-as ; inline
: unzip ( assoc -- keys values ) : unzip ( assoc -- keys values )
dup assoc-empty? [ drop { } { } ] [ >alist flip first2 ] if ; dup assoc-empty? [ drop { } { } ] [ >alist flip first2 ] if ;