From 159dd697e4726298e17058a70ac46f9608335e5b Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Fri, 30 Nov 2007 20:23:27 -0600 Subject: [PATCH] Fix stack effects Add take-while --- extra/sequences/lib/lib-tests.factor | 1 + extra/sequences/lib/lib.factor | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/extra/sequences/lib/lib-tests.factor b/extra/sequences/lib/lib-tests.factor index e1257748b3..82e2b911c3 100644 --- a/extra/sequences/lib/lib-tests.factor +++ b/extra/sequences/lib/lib-tests.factor @@ -41,3 +41,4 @@ math.functions tools.test ; [ V{ } [ delete-random drop ] keep length ] unit-test-fails [ { 1 9 25 } ] [ { 1 3 5 6 } [ sq ] [ even? ] map-until ] unit-test +[ { 2 4 } ] [ { 2 4 1 3 } [ even? ] take-while ] unit-test diff --git a/extra/sequences/lib/lib.factor b/extra/sequences/lib/lib.factor index 0de90b74d6..e090feffea 100644 --- a/extra/sequences/lib/lib.factor +++ b/extra/sequences/lib/lib.factor @@ -63,10 +63,14 @@ IN: sequences.lib : delete-random ( seq -- value ) [ length random ] keep [ nth ] 2keep delete-nth ; -: (map-until) ( quot pred -- ) +: (map-until) ( quot pred -- quot ) [ dup ] swap 3compose [ [ drop t ] [ , f ] if ] compose [ find 2drop ] curry ; -: map-until ( seq quot pred -- ) - #! Example: { 1 3 5 6 } [ sq ] [ even? ] map-until . -> { 1 9 25 } +: map-until ( seq quot pred -- newseq ) (map-until) { } make ; + +: take-while ( seq quot -- newseq ) + [ not ] compose + [ find drop [ head-slice ] when* ] curry + [ dup ] swap compose keep like ;