| 
									
										
										
										
											2009-01-08 19:56:49 -05:00
										 |  |  | ! Copyright (C) 2009 Doug Coleman. | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							|  |  |  | USING: accessors fry generalizations kernel macros math.order | 
					
						
							|  |  |  | stack-checker math ;
 | 
					
						
							|  |  |  | IN: combinators.smart | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-28 23:26:49 -04:00
										 |  |  | MACRO: drop-outputs ( quot -- quot' )
 | 
					
						
							|  |  |  |     dup infer out>> '[ @ _ ndrop ] ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-08 19:56:49 -05:00
										 |  |  | MACRO: output>sequence ( quot exemplar -- newquot )
 | 
					
						
							|  |  |  |     [ dup infer out>> ] dip
 | 
					
						
							|  |  |  |     '[ @ _ _ nsequence ] ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-12 11:32:19 -04:00
										 |  |  | MACRO: output>array ( quot -- newquot )
 | 
					
						
							|  |  |  |     '[ _ { } output>sequence ] ;
 | 
					
						
							| 
									
										
										
										
											2009-01-08 19:56:49 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | MACRO: input<sequence ( quot -- newquot )
 | 
					
						
							|  |  |  |     [ infer in>> ] keep
 | 
					
						
							|  |  |  |     '[ _ firstn @ ] ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-26 22:22:06 -04:00
										 |  |  | MACRO: input<sequence-unsafe ( quot -- newquot )
 | 
					
						
							|  |  |  |     [ infer in>> ] keep
 | 
					
						
							|  |  |  |     '[ _ firstn-unsafe @ ] ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-09 16:39:47 -05:00
										 |  |  | MACRO: reduce-outputs ( quot operation -- newquot )
 | 
					
						
							| 
									
										
										
										
											2009-01-08 19:56:49 -05:00
										 |  |  |     [ dup infer out>> 1 [-] ] dip n*quot compose ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-12 11:32:19 -04:00
										 |  |  | MACRO: sum-outputs ( quot -- n )
 | 
					
						
							|  |  |  |     '[ _ [ + ] reduce-outputs ] ;
 | 
					
						
							| 
									
										
										
										
											2009-01-18 22:18:52 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-12 03:19:41 -05:00
										 |  |  | MACRO: map-reduce-outputs ( quot mapper reducer -- newquot )
 | 
					
						
							|  |  |  |     [ dup infer out>> ] 2dip
 | 
					
						
							|  |  |  |     [ swap '[ _ _ napply ] ] | 
					
						
							|  |  |  |     [ [ 1 [-] ] dip n*quot ] bi-curry* bi
 | 
					
						
							|  |  |  |     '[ @ @ @ ] ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-18 22:18:52 -05:00
										 |  |  | MACRO: append-outputs-as ( quot exemplar -- newquot )
 | 
					
						
							|  |  |  |     [ dup infer out>> ] dip '[ @ _ _ nappend-as ] ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-12 11:32:19 -04:00
										 |  |  | MACRO: append-outputs ( quot -- seq )
 | 
					
						
							|  |  |  |     '[ _ { } append-outputs-as ] ;
 |