exchange

Ab und zu kommt man in die Verlegenheit und muss einzelne Items auf dem Stack vertauschen. Dann kommt es zur berüchtigten Stack-Akrobatik. ;-)

: exchange  ( xi ... xn ... x0 n -- xi ... x0 ... xn )
  dup 0= IF drop exit THEN
  dup 1 = IF drop swap exit THEN
  swap >r >r
  r@ cells sp@ + @ 
  r> r> swap 
  2 + cells sp@ + ! ;