lists: make lmap behave row-polymorphically

Fix contributed by @bremac. Fixes #355.
db4
Joe Groff 2011-11-07 10:37:13 -08:00
parent eb2a0c611b
commit 0856bb5711
2 changed files with 9 additions and 5 deletions

View 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

View 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 )