USING: kernel sequences macros accessors math fry locals generalizations combinators.cleave stack-checker ; IN: ifte ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! : [nkeep*] ( quot n -- quot ) >r { [ ] } swap suffix r> [ ncleave ] curry curry ; MACRO: nkeep* ( quot n -- ) [nkeep*] ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! : [predicating] ( quot -- pred ) [ ] [ infer out>> 1 - ] bi '[ @ _ nnip ] ; : [keeping*] ( quot -- quot ) [ ] [ infer in>> ] bi '[ _ _ nkeep* ] ; : [preserving] ( quot -- quot ) [predicating] [keeping*] ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! :: [ifte] ( TEST THEN ELSE -- quot ) TEST [preserving] '[ @ THEN ELSE if ] ; MACRO: ifte ( test then else -- ) [ifte] ;