: roll (xN ... x1 N M -- xM ... x1 xN ... xM+1) over swap - over % dup 0 < if over + then begin dup 0 > while over 2 + rotate rot rot 1 - repeat pop pop ;