From bee5738aee5b20f303a7abba4682865ac4ca772d Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Wed, 14 Nov 2007 17:32:06 -0600 Subject: [PATCH] add combinators.cleave --- extra/combinators/cleave/cleave.factor | 32 ++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 extra/combinators/cleave/cleave.factor diff --git a/extra/combinators/cleave/cleave.factor b/extra/combinators/cleave/cleave.factor new file mode 100644 index 0000000000..85381ec499 --- /dev/null +++ b/extra/combinators/cleave/cleave.factor @@ -0,0 +1,32 @@ + +USING: kernel ; + +IN: combinators.cleave + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! The cleaver family +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +: bi ( obj quot quot -- val val ) >r over slip r> call ; inline + +: tri ( obj quot quot quot -- val val val ) + >r pick >r bi r> r> call ; inline + +: tetra ( obj quot quot quot quot -- val val val val ) + >r >r pick >r bi r> r> r> bi ; inline + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +: 2bi ( obj obj quot quot -- val val ) >r 2keep r> call ; inline + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! The spread family +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +: bi* ( obj obj quot quot -- val val ) >r swap >r call r> r> call ; inline + +: tri* ( obj obj obj quot quot quot -- val val val ) + >r rot >r bi* r> r> call ; inline + +: tetra* ( obj obj obj obj quot quot quot quot -- val val val val ) + >r roll >r tri* r> r> call ; inline