: UNTIL ( -- ) ?COMPILING
  COMPOST@ BEGINMARKE ?PAIRS
  POSTPONE JOF
  HERE  0 ,
  OFFSET! ; IMMEDIATE
    Merken Sie sich vor allem, dass 
IF und 
BEGIN Nachrichten
    für 
THEN und 
UNTIL hinterlassen.
3. Unbedingte Sprünge
     IF...THEN und 
BEGIN...UNTIL haben jedes für sich
    ein Gegenstück, 
AHEAD...THEN und 
BEGIN...AGAIN,
    mit unbedingten Sprüngen.
    Die Gegenstücke verwenden kein Flag, überprüfen nichts
    und scheinen auf den ersten Blick sinnlos zu sein:
AHEAD ??? THEN ...
BEGIN ... AGAIN ???
   AHEAD springt immer vorwärts auf 
THEN zu,
   und 
AGAIN springt immer zurück nach 
BEGIN.
   Warum dann der Code 
??? nach 
AHEAD und 
AGAIN,
   der doch nie erreicht wird?
    Diese Strukturen haben im Allgemeinen nur dann einen Sinn,
    wenn sie unstrukturiert mit anderen Kontrollstrukturen zusammen verwendet werden.
     
... IF ... ELSE ... THEN ... können Sie
    beispielsweise ansehen als
 
... IF ... AHEAD THEN ... THEN ,
    wovon das erste 
THEN zu 
IF gehört
    und das zweite 
THEN zu 
AHEAD.
    Falsch geschachtelt also.
Sie können das mit einem Kunstgriff zum Funktionieren bringen,
    wenn Sie nämlich den Compiler auf die eine oder andere Art dazu veranlassen,
    genau zwischen 
AHEAD und 
THEN die letzten beiden
    Nachrichtenpäckchen ihre Plätze tauschen zu lassen.
    Dafür gibt es ein (Standard-)Wort: 
1 CS-ROLL
: ELSE (--)
  POSTPONE AHEAD 1 CS-ROLL
  POSTPONE THEN ; IMMEDIATE
    Denselben Trick können Sie auch mit 
AGAIN aus dem Hut zaubern:
 
... BEGIN ... IF ... AGAIN THEN ... wird dann
 
... BEGIN ... IF ... AGAIN? ... mit
: AGAIN? ( -- )
  POSTPONE AGAIN 1 CS-ROLL
  POSTPONE THEN ; IMMEDIATE
    Aber dafür hat man eine andere Lösung erdacht.
    Mehr darüber das nächste Mal.