diff --git a/basis/combinators/smart/smart-tests.factor b/basis/combinators/smart/smart-tests.factor index 33523a0154..ffd1e06f62 100644 --- a/basis/combinators/smart/smart-tests.factor +++ b/basis/combinators/smart/smart-tests.factor @@ -123,3 +123,7 @@ IN: combinators.smart.tests { [ + ] [ + ] } } smart-2map-reduce ] unit-test + +{ { 1 2 3 4 } 5 6 } [ [ 1 2 3 4 5 6 ] 2 output>array-n ] unit-test +{ { } 5 6 } [ [ 5 6 ] 2 output>array-n ] unit-test +{ { 1 2 } 3 4 5 6 } [ [ 1 2 3 4 5 6 ] 4 output>array-n ] unit-test diff --git a/basis/combinators/smart/smart.factor b/basis/combinators/smart/smart.factor index a620fd4cce..04bb94fde0 100644 --- a/basis/combinators/smart/smart.factor +++ b/basis/combinators/smart/smart.factor @@ -67,6 +67,13 @@ M: object infer-known* drop f ; : output>array ( quot -- array ) { } output>sequence ; inline +MACRO: output>sequence-n ( quot exemplar n -- quot ) + 3dup nip [ outputs ] dip - -rot + '[ @ [ _ _ nsequence ] _ ndip ] ; + +MACRO: output>array-n ( quot n -- array ) + '[ _ { } _ output>sequence-n ] ; + : cleave>array ( obj quots -- array ) '[ _ cleave ] output>array ; inline