splitting.monotonic: a bit faster.
							parent
							
								
									743928ae7d
								
							
						
					
					
						commit
						39055423ce
					
				| 
						 | 
					@ -7,19 +7,19 @@ IN: splitting.monotonic
 | 
				
			||||||
<PRIVATE
 | 
					<PRIVATE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:: ((monotonic-split)) ( seq quot slice-quot n -- pieces )
 | 
					:: ((monotonic-split)) ( seq quot slice-quot n -- pieces )
 | 
				
			||||||
    V{ } clone :> accum
 | 
					    V{ 0 } clone :> accum
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    0 0 seq [ ] [
 | 
					    0 seq [ ] [
 | 
				
			||||||
        [ 1 + ] 2dip [
 | 
					        [ 1 + ] 2dip [
 | 
				
			||||||
            quot call [
 | 
					            quot call [ dup accum push ] unless
 | 
				
			||||||
                [ seq slice-quot call accum push ] keep dup
 | 
					 | 
				
			||||||
            ] unless
 | 
					 | 
				
			||||||
        ] keep
 | 
					        ] keep
 | 
				
			||||||
    ] map-reduce drop
 | 
					    ] map-reduce drop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    n = [ drop ] [ n seq slice-quot call accum push ] if
 | 
					    n = [ n accum push ] unless
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    accum { } like ; inline
 | 
					    accum dup rest-slice [
 | 
				
			||||||
 | 
					        seq slice-quot call
 | 
				
			||||||
 | 
					    ] { } 2map-as ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: (monotonic-split) ( seq quot slice-quot -- pieces )
 | 
					: (monotonic-split) ( seq quot slice-quot -- pieces )
 | 
				
			||||||
    pick length [ 3drop { } ] [ ((monotonic-split)) ] if-zero ; inline
 | 
					    pick length [ 3drop { } ] [ ((monotonic-split)) ] if-zero ; inline
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue