| 
									
										
										
										
											2009-02-08 00:04:55 -05:00
										 |  |  | ! Copyright (C) 2007, 2009 Chris Double, Doug Coleman, Eduardo | 
					
						
							| 
									
										
										
										
											2008-11-25 06:55:49 -05:00
										 |  |  | ! Cavazos, Slava Pestov. | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2009-02-02 17:35:30 -05:00
										 |  |  | USING: kernel sequences sequences.private math combinators | 
					
						
							| 
									
										
										
										
											2009-02-10 17:42:35 -05:00
										 |  |  | macros quotations fry effects ;
 | 
					
						
							| 
									
										
										
										
											2008-11-25 06:55:49 -05:00
										 |  |  | IN: generalizations | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-25 17:47:47 -05:00
										 |  |  | << | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : n*quot ( n seq -- seq' ) <repetition> concat >quotation ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : repeat ( n obj quot -- ) swapd times ; inline
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | >> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-27 22:53:53 -05:00
										 |  |  | MACRO: nsequence ( n seq -- )
 | 
					
						
							| 
									
										
										
										
											2008-11-25 06:55:49 -05:00
										 |  |  |     [ | 
					
						
							|  |  |  |         [ drop <reversed> ] [ '[ _ _ new-sequence ] ] 2bi
 | 
					
						
							|  |  |  |         [ '[ @ [ _ swap set-nth-unsafe ] keep ] ] reduce
 | 
					
						
							|  |  |  |     ] keep
 | 
					
						
							|  |  |  |     '[ @ _ like ] ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-27 22:53:53 -05:00
										 |  |  | MACRO: narray ( n -- )
 | 
					
						
							| 
									
										
										
										
											2008-11-25 06:55:49 -05:00
										 |  |  |     '[ _ { } nsequence ] ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-08 00:04:55 -05:00
										 |  |  | MACRO: nsum ( n -- )
 | 
					
						
							|  |  |  |     1- [ + ] n*quot ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-25 06:55:49 -05:00
										 |  |  | MACRO: firstn ( n -- )
 | 
					
						
							|  |  |  |     dup zero? [ drop [ drop ] ] [ | 
					
						
							|  |  |  |         [ [ '[ [ _ ] dip nth-unsafe ] ] map ] | 
					
						
							|  |  |  |         [ 1- '[ [ _ ] dip bounds-check 2drop ] ] | 
					
						
							|  |  |  |         bi prefix '[ _ cleave ] | 
					
						
							|  |  |  |     ] if ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-27 22:53:53 -05:00
										 |  |  | MACRO: npick ( n -- )
 | 
					
						
							| 
									
										
										
										
											2008-11-25 17:47:47 -05:00
										 |  |  |     1- [ dup ] [ '[ _ dip swap ] ] repeat ;
 | 
					
						
							| 
									
										
										
										
											2008-11-25 06:55:49 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | MACRO: ndup ( n -- )
 | 
					
						
							|  |  |  |     dup '[ _ npick ] n*quot ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MACRO: nrot ( n -- )
 | 
					
						
							| 
									
										
										
										
											2008-11-25 17:47:47 -05:00
										 |  |  |     1- [ ] [ '[ _ dip swap ] ] repeat ;
 | 
					
						
							| 
									
										
										
										
											2008-11-25 06:55:49 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | MACRO: -nrot ( n -- )
 | 
					
						
							| 
									
										
										
										
											2008-11-25 17:47:47 -05:00
										 |  |  |     1- [ ] [ '[ swap _ dip ] ] repeat ;
 | 
					
						
							| 
									
										
										
										
											2008-11-25 06:55:49 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | MACRO: ndrop ( n -- )
 | 
					
						
							|  |  |  |     [ drop ] n*quot ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-25 17:47:47 -05:00
										 |  |  | MACRO: nnip ( n -- )
 | 
					
						
							|  |  |  |     '[ [ _ ndrop ] dip ] ;
 | 
					
						
							| 
									
										
										
										
											2008-11-25 06:55:49 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | MACRO: ntuck ( n -- )
 | 
					
						
							| 
									
										
										
										
											2008-11-25 17:47:47 -05:00
										 |  |  |     2 + '[ dup _ -nrot ] ;
 | 
					
						
							| 
									
										
										
										
											2008-11-25 06:55:49 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | MACRO: ndip ( quot n -- )
 | 
					
						
							| 
									
										
										
										
											2008-11-25 17:47:47 -05:00
										 |  |  |     [ '[ _ dip ] ] times ;
 | 
					
						
							| 
									
										
										
										
											2008-11-25 06:55:49 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | MACRO: nslip ( n -- )
 | 
					
						
							| 
									
										
										
										
											2008-11-25 17:47:47 -05:00
										 |  |  |     '[ [ call ] _ ndip ] ;
 | 
					
						
							| 
									
										
										
										
											2008-11-25 06:55:49 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-25 17:47:47 -05:00
										 |  |  | MACRO: nkeep ( quot n -- )
 | 
					
						
							|  |  |  |     tuck '[ _ ndup _ _ ndip ] ;
 | 
					
						
							| 
									
										
										
										
											2008-11-25 06:55:49 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | MACRO: ncurry ( n -- )
 | 
					
						
							|  |  |  |     [ curry ] n*quot ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MACRO: nwith ( n -- )
 | 
					
						
							|  |  |  |     [ with ] n*quot ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-09 05:20:20 -05:00
										 |  |  | MACRO: ncleave ( quots n -- )
 | 
					
						
							|  |  |  |     [ '[ _ '[ _ _ nkeep ] ] map [ ] join ] [ '[ _ ndrop ] ] bi
 | 
					
						
							|  |  |  |     compose ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-08 00:04:55 -05:00
										 |  |  | MACRO: nspread ( quots n -- )
 | 
					
						
							|  |  |  |     over empty? [ 2drop [ ] ] [ | 
					
						
							|  |  |  |         [ [ but-last ] dip ] | 
					
						
							|  |  |  |         [ [ peek ] dip ] 2bi
 | 
					
						
							|  |  |  |         swap
 | 
					
						
							|  |  |  |         '[ [ _ _ nspread ] _ ndip @ ] | 
					
						
							|  |  |  |     ] if ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 20:41:12 -05:00
										 |  |  | MACRO: napply ( quot n -- )
 | 
					
						
							|  |  |  |     swap <repetition> spread>quot ;
 | 
					
						
							| 
									
										
										
										
											2008-11-27 22:07:50 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | MACRO: mnswap ( m n -- )
 | 
					
						
							| 
									
										
										
										
											2009-02-08 00:04:55 -05:00
										 |  |  |     1+ '[ _ -nrot ] swap '[ _ _ napply ] ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MACRO: nweave ( n -- )
 | 
					
						
							|  |  |  |     [ dup <reversed> [ '[ _ _ mnswap ] ] with map ] keep
 | 
					
						
							|  |  |  |     '[ _ _ ncleave ] ;
 | 
					
						
							| 
									
										
										
										
											2009-01-18 21:26:58 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : nappend-as ( n exemplar -- seq )
 | 
					
						
							|  |  |  |     [ narray concat ] dip like ; inline
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-10 17:42:35 -05:00
										 |  |  | : nappend ( n -- seq ) narray concat ; inline
 |