]> gitweb.factorcode.org Git - factor.git/commitdiff
Adding lmap and traverse to extra/lists
authorJames Cash <james.nvc@gmail.com>
Wed, 4 Jun 2008 05:40:51 +0000 (01:40 -0400)
committerJames Cash <james.nvc@gmail.com>
Wed, 4 Jun 2008 05:40:51 +0000 (01:40 -0400)
extra/lists/lists-tests.factor
extra/lists/lists.factor

index 534c20245b96e9772d3304f384f04141f1f0151b..0abb8befebdbdb1d8e0917965839951ad2293adb 100644 (file)
@@ -41,6 +41,10 @@ IN: lists.tests
   { 1 2 { 3 4 { 5 } } } seq>cons cons>seq  
 ] unit-test
     
+{ T{ cons f 2 T{ cons f 3 T{ cons f 4 T{ cons f 5 +nil+ } } } } } [
+    { 1 2 3 4 } seq>cons [ 1+ ] lmap
+] unit-test
+    
 ! { { 3 4 { 5 6 { 7 } } } } [
 !   { 1 2 { 3 4 { 5 } } } seq>cons [ 2 + ] traverse cons>seq
 ! ] unit-test
\ No newline at end of file
index 388bfb5bd723fc51fc9591594495deb03185cd89..b0fd41fe75077a5848c400fe130c2f9829527926 100644 (file)
@@ -59,9 +59,6 @@ M: object nil? drop f ;
 : lreduce ( list identity quot -- result )
     swapd leach ; inline
     
-! : lmap ( cons quot -- newcons )    
-    
-    
 : (lmap>array) ( acc cons quot -- newcons )
     over nil? [ 2drop ]
     [ [ uncons ] dip [ call ] keep swapd [ suffix ] 2dip (lmap>array) ] if ; inline
@@ -72,6 +69,9 @@ M: object nil? drop f ;
 : lmap-as ( cons quot exemplar -- seq )
     [ lmap>array ] dip like ;
     
+: lmap ( list quot -- newlist )    
+    lmap>array <reversed> nil [ swap cons ] reduce ;
+    
 : same? ( obj1 obj2 -- ? ) 
     [ class ] bi@ = ;
     
@@ -82,6 +82,6 @@ M: object nil? drop f ;
     [ dup cons? [ cons>seq ] when ] lmap>array ;
     
 : traverse ( list quot -- newlist )
-    [ over list? [ traverse ] [ call ] if ] curry  ;
+    [ over list? [ traverse ] [ call ] if ] curry lmap ;
     
 INSTANCE: cons list
\ No newline at end of file