]> gitweb.factorcode.org Git - factor.git/commitdiff
combinators.smart: Add smart combinator that outputs a seq and (length-n) more elements.
authorDoug Coleman <doug.coleman@gmail.com>
Thu, 6 Aug 2015 08:20:10 +0000 (03:20 -0500)
committerDoug Coleman <doug.coleman@gmail.com>
Thu, 6 Aug 2015 17:07:20 +0000 (12:07 -0500)
basis/combinators/smart/smart-tests.factor
basis/combinators/smart/smart.factor

index 33523a01546c839865a8268d6ced387a3af2c29c..ffd1e06f6246d968dcbaa2f9bc846c0450859cec 100644 (file)
@@ -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
index a620fd4cce4c55b8e7d0f41897550751505f775f..04bb94fde05a3e4b24f6a6ee2d69c13fd06aaf51 100644 (file)
@@ -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