sequences.extras: cleanup reduce's a little.
							parent
							
								
									17415b3525
								
							
						
					
					
						commit
						7d27d64f36
					
				| 
						 | 
				
			
			@ -6,16 +6,17 @@ IN: sequences.extras
 | 
			
		|||
 | 
			
		||||
: reduce1 ( seq quot -- result ) [ unclip ] dip reduce ; inline
 | 
			
		||||
 | 
			
		||||
:: reduce-r ( list identity quot: ( obj1 obj2 -- obj ) -- result )
 | 
			
		||||
    list empty?
 | 
			
		||||
    [ identity ]
 | 
			
		||||
    [ list rest identity quot reduce-r list first quot call ] if ;
 | 
			
		||||
    inline recursive
 | 
			
		||||
:: reduce-r ( seq identity quot: ( obj1 obj2 -- obj ) -- result )
 | 
			
		||||
    seq [ identity ] [
 | 
			
		||||
        unclip [ identity quot reduce-r ] [ quot call ] bi*
 | 
			
		||||
    ] if-empty ; inline recursive
 | 
			
		||||
 | 
			
		||||
! Quot must have static stack effect, unlike "reduce"
 | 
			
		||||
:: reduce* ( seq id quot -- result ) seq
 | 
			
		||||
    [ id ]
 | 
			
		||||
    [ unclip id swap quot call( prev elt -- next ) quot reduce* ] if-empty ; inline recursive
 | 
			
		||||
:: reduce* ( seq identity quot: ( prev elt -- next ) -- result )
 | 
			
		||||
    seq [ identity ] [
 | 
			
		||||
        unclip identity swap quot call( prev elt -- next )
 | 
			
		||||
        quot reduce*
 | 
			
		||||
    ] if-empty ; inline recursive
 | 
			
		||||
 | 
			
		||||
:: combos ( list1 list2 -- result )
 | 
			
		||||
    list2 [ [ 2array ] curry list1 swap map ] map concat ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue