From 0b6d405537c2c33a16edbd02fe5729ba712646fb Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Sat, 5 Jul 2008 07:25:10 -0500 Subject: [PATCH] combinators.cleave: narr and arity variants --- extra/combinators/cleave/cleave.factor | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/extra/combinators/cleave/cleave.factor b/extra/combinators/cleave/cleave.factor index 2f9e027211..9b8a790760 100644 --- a/extra/combinators/cleave/cleave.factor +++ b/extra/combinators/cleave/cleave.factor @@ -1,13 +1,19 @@ -USING: kernel combinators quotations arrays sequences locals macros - shuffle combinators.lib ; +USING: kernel combinators words quotations arrays sequences locals macros + shuffle combinators.lib arrays.lib fry ; IN: combinators.cleave ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +: >quot ( obj -- quot ) dup word? [ 1quotation ] when ; + +: >quots ( seq -- seq ) [ >quot ] map ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + :: [ncleave] ( SEQ N -- quot ) - SEQ [ [ N nkeep ] curry ] map concat [ N ndrop ] append >quotation ; + SEQ >quots [ [ N nkeep ] curry ] map concat [ N ndrop ] append >quotation ; MACRO: ncleave ( seq n -- quot ) [ncleave] ; @@ -15,11 +21,16 @@ MACRO: ncleave ( seq n -- quot ) [ncleave] ; ! Cleave into array ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -USING: words quotations fry arrays.lib ; +: [narr] ( seq n -- quot ) over length '[ , , ncleave , narray ] ; -: >quot ( obj -- quot ) dup word? [ 1quotation ] when ; +MACRO: narr ( seq n -- array ) [narr] ; -: >quots ( seq -- seq ) [ >quot ] map ; +MACRO: 0arr ( seq -- array ) 0 [narr] ; +MACRO: 1arr ( seq -- array ) 1 [narr] ; +MACRO: 2arr ( seq -- array ) 2 [narr] ; +MACRO: 3arr ( seq -- array ) 3 [narr] ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! MACRO: ( seq -- ) [ >quots ] [ length ] bi