]> gitweb.factorcode.org Git - factor.git/blobdiff - extra/sequences/extras/extras.factor
sequences.extras: add the reduce* word
[factor.git] / extra / sequences / extras / extras.factor
index e6f24f60427846fce81e69bae380ceb059e0888f..e2e6250c792d2a2b563ee0459830c50205e8240f 100644 (file)
@@ -4,6 +4,13 @@ math.order ranges sequences sequences.private sets shuffle
 sorting splitting vectors ;
 IN: sequences.extras
 
+! Quot must have static stack effect, unlike "reduce"
+:: reduce* ( seq identity quot: ( prev elt -- next ) -- result )
+    seq [ identity ] [
+        unclip identity swap quot call( prev elt -- next )
+        quot reduce*
+    ] if-empty ; inline recursive
+
 : find-all ( ... seq quot: ( ... elt -- ... ? ) -- ... elts )
     [ <enumerated> ] dip '[ nip @ ] assoc-filter ; inline