{ "abc" } [ "abc" [ 1string ] map-concat ] unit-test
{ "abc" } [ { 97 98 99 } [ 1string ] map-concat ] unit-test
{ { 97 98 99 } } [ "abc" [ 1string ] { } map-concat-as ] unit-test
-{ { "foobaz" "barbaz" } }
-[ "baz" { { "foo" } { "bar" } } [ [ prepend ] with map ] with map-concat ] unit-test
+{ "baz" { "foobaz" "barbaz" } }
+[ "baz" { { "foo" } { "bar" } } [ [ over append ] map ] map-concat ] unit-test
{ { } } [ { } [ ] [ even? ] map-filter ] unit-test
{ "bcde" } [ "abcd" [ 1 + ] [ drop t ] map-filter ] unit-test
: map-concat ( ... seq quot: ( ... elt -- ... newelt ) -- ... newseq )
over empty? [ 2drop { } ] [
- [ [ first ] dip call ] 2keep pick [
- [ >resizable ] 2dip [ append! ] compose 1 each-from
- ] dip like
+ [ [ first ] dip call ] 2keep rot [
+ >resizable [ '[ @ _ push-all ] 1 each-from ] keep
+ ] keep like
] if ; inline
: map-filter-as ( ... seq map-quot: ( ... elt -- ... newelt ) filter-quot: ( ... newelt -- ... ? ) exemplar -- ... subseq )