Add append-outputs and append-outputs-as, docs, tests
							parent
							
								
									8c857f0d4b
								
							
						
					
					
						commit
						a5175c1d1e
					
				| 
						 | 
				
			
			@ -76,6 +76,37 @@ HELP: sum-outputs
 | 
			
		|||
    }
 | 
			
		||||
} ;
 | 
			
		||||
 | 
			
		||||
HELP: append-outputs
 | 
			
		||||
{ $values
 | 
			
		||||
     { "quot" quotation }
 | 
			
		||||
     { "seq" sequence }
 | 
			
		||||
}
 | 
			
		||||
{ $description "Infers the number of outputs from " { $snippet "quot" } " and returns a sequence of the outputs appended." }
 | 
			
		||||
{ $examples
 | 
			
		||||
    { $example
 | 
			
		||||
        "USING: combinators.smart prettyprint ;"
 | 
			
		||||
        "[ { 1 2 } { \"A\" \"b\" } ] append-outputs ."
 | 
			
		||||
        "{ 1 2 \"A\" \"b\" }"
 | 
			
		||||
    }
 | 
			
		||||
} ;
 | 
			
		||||
 | 
			
		||||
HELP: append-outputs-as
 | 
			
		||||
{ $values
 | 
			
		||||
     { "quot" quotation } { "exemplar" sequence }
 | 
			
		||||
     { "seq" sequence }
 | 
			
		||||
}
 | 
			
		||||
{ $description "Infers the number of outputs from " { $snippet "quot" } " and returns a sequence of type " { $snippet "exemplar" } " of the outputs appended." }
 | 
			
		||||
{ $examples
 | 
			
		||||
    { $example
 | 
			
		||||
        "USING: combinators.smart prettyprint ;"
 | 
			
		||||
        "[ { 1 2 } { \"A\" \"b\" } ] V{ } append-outputs-as ."
 | 
			
		||||
        "V{ 1 2 \"A\" \"b\" }"
 | 
			
		||||
    }
 | 
			
		||||
} ;
 | 
			
		||||
 | 
			
		||||
{ append-outputs append-outputs-as } related-words
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ARTICLE: "combinators.smart" "Smart combinators"
 | 
			
		||||
"The " { $vocab-link "combinators.smart" } " vocabulary implements " { $emphasis "smart combinators" } ". A smart combinator is one whose behavior depends on the static stack effect of an input quotation." $nl
 | 
			
		||||
"Smart inputs from a sequence:"
 | 
			
		||||
| 
						 | 
				
			
			@ -86,6 +117,9 @@ ARTICLE: "combinators.smart" "Smart combinators"
 | 
			
		|||
"Reducing the output of a quotation:"
 | 
			
		||||
{ $subsection reduce-outputs }
 | 
			
		||||
"Summing the output of a quotation:"
 | 
			
		||||
{ $subsection sum-outputs } ;
 | 
			
		||||
{ $subsection sum-outputs }
 | 
			
		||||
"Appending the results of a quotation:"
 | 
			
		||||
{ $subsection append-outputs }
 | 
			
		||||
{ $subsection append-outputs-as } ;
 | 
			
		||||
 | 
			
		||||
ABOUT: "combinators.smart"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,10 +12,28 @@ IN: combinators.smart.tests
 | 
			
		|||
[ { 9 11 } [ + ] input<sequence ] must-infer
 | 
			
		||||
[ 20 ] [ { 9 11 } [ + ] input<sequence ] unit-test
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[ 6 ] [ [ 1 2 3 ] [ + ] reduce-outputs ] unit-test
 | 
			
		||||
 | 
			
		||||
[ [ 1 2 3 ] [ + ] reduce-outputs ] must-infer
 | 
			
		||||
 | 
			
		||||
[ 6 ] [ [ 1 2 3 ] sum-outputs ] unit-test
 | 
			
		||||
 | 
			
		||||
[ "ab" ]
 | 
			
		||||
[
 | 
			
		||||
    [ "a" "b" ] "" append-outputs-as
 | 
			
		||||
] unit-test
 | 
			
		||||
 | 
			
		||||
[ "" ]
 | 
			
		||||
[
 | 
			
		||||
    [ ] "" append-outputs-as
 | 
			
		||||
] unit-test
 | 
			
		||||
 | 
			
		||||
[ { } ]
 | 
			
		||||
[
 | 
			
		||||
    [ ] append-outputs
 | 
			
		||||
] unit-test
 | 
			
		||||
 | 
			
		||||
[ B{ 1 2 3 } ]
 | 
			
		||||
[
 | 
			
		||||
    [ { 1 } { 2 } { 3 } ] B{ } append-outputs-as
 | 
			
		||||
] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,3 +20,9 @@ MACRO: reduce-outputs ( quot operation -- newquot )
 | 
			
		|||
 | 
			
		||||
: sum-outputs ( quot -- n )
 | 
			
		||||
    [ + ] reduce-outputs ; inline
 | 
			
		||||
 | 
			
		||||
MACRO: append-outputs-as ( quot exemplar -- newquot )
 | 
			
		||||
    [ dup infer out>> ] dip '[ @ _ _ nappend-as ] ;
 | 
			
		||||
 | 
			
		||||
: append-outputs ( quot -- seq )
 | 
			
		||||
    { } append-outputs-as ; inline
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue