2008-05-18 05:09:56 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								! Copyright (C) 2008 Alex Chapman
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								! See http://factorcode.org/license.txt for BSD license.
							 | 
						
					
						
							
								
									
										
										
										
											2009-11-06 17:05:55 -05:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								USING: accessors arrays kernel math math.order sequences
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								sequences.private ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-05-18 05:09:56 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								IN: sequences.merged
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								TUPLE: merged seqs ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								C: <merged> merged
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: <2merged> ( seq1 seq2 -- merged ) 2array <merged> ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: <3merged> ( seq1 seq2 seq3 -- merged ) 3array <merged> ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: merge ( seqs -- seq )
							 | 
						
					
						
							
								
									
										
										
										
											2009-11-06 17:05:55 -05:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    [ <merged> ] keep first like ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-05-18 05:09:56 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: 2merge ( seq1 seq2 -- seq )
							 | 
						
					
						
							
								
									
										
										
										
											2009-11-06 17:05:55 -05:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    [ <2merged> ] 2keep drop like ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-05-18 05:09:56 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: 3merge ( seq1 seq2 seq3 -- seq )
							 | 
						
					
						
							
								
									
										
										
										
											2009-11-06 17:05:55 -05:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    [ <3merged> ] 3keep 2drop like ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-05-18 05:09:56 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2009-11-06 17:05:55 -05:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								M: merged length
							 | 
						
					
						
							
								
									
										
										
										
											2009-11-06 18:06:26 -05:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    seqs>> [ [ length ] [ min ] map-reduce ] [ length ] bi * ; inline
							 | 
						
					
						
							
								
									
										
										
										
											2008-05-18 05:09:56 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								M: merged virtual@ ( n seq -- n' seq' )
							 | 
						
					
						
							
								
									
										
										
										
											2009-11-06 18:06:26 -05:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    seqs>> [ length /mod ] [ nth-unsafe ] bi ; inline
							 | 
						
					
						
							
								
									
										
										
										
											2008-05-18 05:09:56 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2009-11-06 18:06:26 -05:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								M: merged virtual-exemplar ( merged -- seq )
							 | 
						
					
						
							
								
									
										
										
										
											2011-10-13 15:53:46 -04:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    seqs>> ?first ; inline
							 | 
						
					
						
							
								
									
										
										
										
											2008-05-19 10:58:45 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-05-18 05:09:56 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								INSTANCE: merged virtual-sequence
							 |