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
@ -76,6 +73,9 @@ PRIVATE>
: lreverse ( list -- newlist )
nil [ swons ] foldl ;
: lmap ( ... list quot: ( ... elt -- ... newelt ) -- ... result )
[ nil ] dip [ swapd dip cons ] curry foldl lreverse ; inline
: lappend ( list1 list2 -- newlist )
[ lreverse ] dip [ swons ] foldl ;