{ 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
: 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
: 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@ = ;
[ 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