]> gitweb.factorcode.org Git - factor.git/commitdiff
sequences.extras: cleanup reduce's a little.
authorJohn Benediktsson <mrjbq7@gmail.com>
Fri, 26 Apr 2013 03:48:04 +0000 (20:48 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Fri, 26 Apr 2013 03:48:04 +0000 (20:48 -0700)
extra/sequences/extras/extras.factor

index 9a5bd466886cd20d1f1611da22f835aecbc0d013..14aee5121aa43e47ca24722ab38d500cffb8aec9 100644 (file)
@@ -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 ;