TUPLE: posn x y z ; : getXYZ ( posn -- x y z ) [ x>> ] [ y>> ] [ z>> ] tri ; : ( x y z -- posn ) posn boa ; : rearrange ( posn quot -- posn' ) [ getXYZ ] dip call ; inline : f1 ( x y z -- x' y' z' ) neg swap ; :: d1 ( x y z -- z x y ) z x y ; : rotf1 ( p -- p ) [ f1 ] rearrange ; : rotd1 ( p -- p ) [ d1 ] rearrange ; ! test... ( scratchpad ) 1 2 3 rotf1 . T{ posn { x 1 } { y -3 } { z 2 } } ( scratchpad ) 1 2 3 rotd1 . T{ posn { x 3 } { y 1 } { z 2 } }