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 22 33 } [ + ] map-index ] unit-test
{
V{ 11 23 35 }
} [ V{ 11 22 33 } [ + ] map-index ] unit-test
{
V{ 11 23 35 }
} [ { 11 22 33 } [ + ] V{ } map-index-as ] unit-test
@ -235,6 +239,10 @@ unit-test
{ { 1 4 } { 2 5 } { 3 6 } }
} [ { 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 2 3 } { 4 5 6 } { } zip-as ] unit-test
@ -267,6 +275,10 @@ unit-test
{ { 11 0 } { 22 1 } { 33 2 } }
} [ { 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 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
: zip ( keys values -- alist )
{ } zip-as ; inline
over zip-as ; inline
: map-index-as ( ... seq quot: ( ... elt index -- ... newelt ) exemplar -- ... obj )
dup sequence? [
@ -219,13 +219,13 @@ M: assoc value-at* swap [ = nip ] curry assoc-find nip ;
] if ; inline
: map-index ( ... seq quot: ( ... elt index -- ... newelt ) -- ... newseq )
{ } map-index-as ; inline
over map-index-as ; inline
: zip-index-as ( values exemplar -- obj )
[ [ 2array ] ] dip map-index-as ; inline
: zip-index ( values -- alist )
{ } zip-index-as ; inline
dup zip-index-as ; inline
: unzip ( assoc -- keys values )
dup assoc-empty? [ drop { } { } ] [ >alist flip first2 ] if ;