diff --git a/extra/combinators/extras/extras-tests.factor b/extra/combinators/extras/extras-tests.factor index 873c168e41..594ec44c46 100644 --- a/extra/combinators/extras/extras-tests.factor +++ b/extra/combinators/extras/extras-tests.factor @@ -23,3 +23,7 @@ IN: combinators.extras.tests ] unit-test { { 1 2 3 } } [ 1 { [ ] [ 1 + ] [ 2 + ] } cleave-array ] unit-test + +{ 2 15 } [ 1 2 3 4 5 6 [ - - ] [ + + ] 3bi* ] unit-test + +{ 2 5 } [ 1 2 3 4 5 6 [ - - ] 3bi@ ] unit-test diff --git a/extra/combinators/extras/extras.factor b/extra/combinators/extras/extras.factor index 2787b50d2d..28a87ef608 100644 --- a/extra/combinators/extras/extras.factor +++ b/extra/combinators/extras/extras.factor @@ -18,3 +18,9 @@ MACRO: cond-case ( assoc -- ) MACRO: cleave-array ( quots -- ) [ '[ _ cleave ] ] [ length '[ _ narray ] ] bi compose ; + +: 3bi* ( u v w x y z p q -- ) + [ 3dip ] dip call ; inline + +: 3bi@ ( u v w x y z quot -- ) + dup 3bi* ; inline