]> gitweb.factorcode.org Git - factor.git/commitdiff
lists: make lmap behave row-polymorphically
authorJoe Groff <arcata@gmail.com>
Mon, 7 Nov 2011 18:37:13 +0000 (10:37 -0800)
committerJoe Groff <arcata@gmail.com>
Mon, 7 Nov 2011 18:37:35 +0000 (10:37 -0800)
Fix contributed by @bremac. Fixes #355.

basis/lists/lists-tests.factor
basis/lists/lists.factor

index d2f969cddc62236632ef8a848959d65f25b38517..a39cc174904bdee10a4a6d6041f388775e3fbebb 100644 (file)
@@ -7,6 +7,10 @@ IN: lists.tests
     { 1 2 3 4 5 } sequence>list [ 2 + ] lmap list>array
 ] unit-test
 
+{ 2 { 3 4 5 6 7 } } [
+    2 { 1 2 3 4 5 } sequence>list [ dupd + ] lmap list>array
+] unit-test
+
 { { 3 4 5 6 } } [
     T{ cons f 1       
         T{ cons f 2 
index 87f69d16e18674f5a213f749069652f009891b9f..91b671bd61680149f17fcbaff1a66fc34d326c3f 100644 (file)
@@ -58,9 +58,6 @@ PRIVATE>
 : leach ( ... list quot: ( ... elt -- ... ) -- ... )
     over nil? [ 2drop ] [ (leach) leach ] if ; inline recursive
 
-: lmap ( ... list quot: ( ... elt -- ... newelt ) -- ... result )
-    over nil? [ drop ] [ (leach) lmap cons ] if ; inline recursive
-
 : foldl ( ... list identity quot: ( ... prev elt -- ... next ) -- ... result )
     swapd leach ; inline
 
@@ -73,10 +70,13 @@ PRIVATE>
 : llength ( list -- n )
     0 [ drop 1 + ] foldl ;
 
-: lreverse ( list -- newlist )    
+: lreverse ( list -- newlist )
     nil [ swons ] foldl ;
 
-: lappend ( list1 list2 -- newlist )    
+: lmap ( ... list quot: ( ... elt -- ... newelt ) -- ... result )
+    [ nil ] dip [ swapd dip cons ] curry foldl lreverse ; inline
+
+: lappend ( list1 list2 -- newlist )
     [ lreverse ] dip [ swons ] foldl ;
 
 : lcut ( list index -- before after )