]> gitweb.factorcode.org Git - factor.git/commitdiff
lists: Add 2leach, lreduce, and 2lreduce
authorDoug Coleman <doug.coleman@gmail.com>
Tue, 25 May 2021 13:52:04 +0000 (08:52 -0500)
committerDoug Coleman <doug.coleman@gmail.com>
Tue, 25 May 2021 13:54:38 +0000 (08:54 -0500)
basis/lists/lists.factor

index 6a80d482b40d780b19654bccfcc86c2693533e32..260eb856c0d0eec5045cde762aaaaff9bebb00c1 100644 (file)
@@ -53,11 +53,23 @@ M: object nil? drop f ;
 : (leach) ( list quot -- cdr quot )
     [ [ car ] dip call ] [ [ cdr ] dip ] 2bi ; inline
 
+: (2leach) ( list1 list2 quot -- cdr1 cdr2 quot )
+    [ [ [ car ] bi@ ] dip call ] [ [ [ cdr ] bi@ ] dip ] 3bi ; inline
+
 PRIVATE>
 
 : leach ( ... list quot: ( ... elt -- ... ) -- ... )
     over nil? [ 2drop ] [ (leach) leach ] if ; inline recursive
 
+: 2leach ( ... list1 list2 quot: ( ... elt1 elt2 -- ... ) -- ... )
+    2over [ nil? ] either? [ 3drop ] [ (2leach) 2leach ] if ; inline recursive
+
+: lreduce ( ... list identity quot: ( ... prev elt -- ... next ) -- ... result )
+    swapd leach ; inline
+
+: 2lreduce ( ... list1 list2 identity quot: ( ... prev elt1 elt2 -- ... next ) -- ... result )
+    -rotd 2leach ; inline
+
 : foldl ( ... list identity quot: ( ... prev elt -- ... next ) -- ... result )
     swapd leach ; inline