diff options
Diffstat (limited to 'stdlib/source/library/lux/data/collection/sequence.lux')
-rw-r--r-- | stdlib/source/library/lux/data/collection/sequence.lux | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/stdlib/source/library/lux/data/collection/sequence.lux b/stdlib/source/library/lux/data/collection/sequence.lux index c8049c3b3..6264d6083 100644 --- a/stdlib/source/library/lux/data/collection/sequence.lux +++ b/stdlib/source/library/lux/data/collection/sequence.lux @@ -66,12 +66,12 @@ 0 head _ (item (dec idx) tail)))) -(template [<taker> <dropper> <splitter> <pred_type> <pred_test> <pred_step>] +(template [<taker> <dropper> <pred_type> <pred_test> <pred_step> <post_test>] [(def: .public (<taker> pred xs) (All [a] (-> <pred_type> (Sequence a) (List a))) (let [[x xs'] (//.result xs)] - (if <pred_test> + (if (<post_test> <pred_test>) (list& x (<taker> <pred_step> xs')) (list)))) @@ -79,21 +79,26 @@ (All [a] (-> <pred_type> (Sequence a) (Sequence a))) (let [[x xs'] (//.result xs)] - (if <pred_test> + (if (<post_test> <pred_test>) (<dropper> <pred_step> xs') - xs))) + xs)))] + + [while until (-> a Bit) (pred x) pred |>] + [take drop Nat (n.= 0 pred) (dec pred) not] + ) - (def: .public (<splitter> pred xs) +(template [<splitter> <pred_type> <pred_test> <pred_step>] + [(def: .public (<splitter> pred xs) (All [a] (-> <pred_type> (Sequence a) [(List a) (Sequence a)])) (let [[x xs'] (//.result xs)] (if <pred_test> + [(list) xs] (let [[tail next] (<splitter> <pred_step> xs')] - [(#.Item [x tail]) next]) - [(list) xs])))] + [(#.Item [x tail]) next]))))] - [take_while drop_while split_while (-> a Bit) (pred x) pred] - [take drop split Nat (n.> 0 pred) (dec pred)] + [split_when (-> a Bit) (pred x) pred] + [split Nat (n.= 0 pred) (dec pred)] ) (def: .public (unfold step init) |