211d
<< <> >>
DECIMAL
16 FFBASE HX   2 FFBASE BN   10 FFBASE DM
HX beeinflusst nur das nächste Wort. Wenn Forth sich an diesem Wort verschluckt, gibt es eine Fehlermeldung aus und steigt aus. HX kommt dadurch nicht mehr dazu, die Basiszahl wiederherzustellen. Dem kann dadurch abgeholfen werden, dass man das fehlerempfindliche EVALUATE in ein CATCH setzt. Die letzten beiden Zeilen von FFBASE werden dann:
  COUNT ['] EVALUATE CATCH
  R> BASE ! THROW ;
Solch eine Sicherheitsmaßnahme heißt natürlich mit Kanonen auf Spatzen schießen, sie funktioniert aber ausgezeichnet.

Die sechs Möglichkeiten von Theo

  1. HX 10 . [rtn] 16 ok
    10 wird als Hexzahl aufgefasst.
     
  2. : DUTZEND HX C . ;
    HX sieht C als eine Hexzahl an und compiliert es. Der Definition kann man es nicht mehr ansehen, dass HX eine Rolle gespielt hat.
    ? Was wird BN DUTZEND bewirken?
     
  3. HX SEE FFBASE [rtn] ...
    SEE decompiliert FFBASE in hex. Natürlich nur dann, wenn die Basiszahl nicht innerhalb SEE explizit manipuliert wird.
     
  4. : .BITS BN U. ; -1 .BITS [rtn] 11...11 ok
    .BITS gibt immer binär aus. Allein in diesem Zusammenhang wird die Veränderung von BASE auch wirklich compiliert.
    Frage: Was wird HX .BITS bewirken?
     
  5. : [.S] .S ; IMMEDIATE BN [.S] [rtn] ...
     
  6. : TEST HX [.S] 0<> ;
    HX [.S] gibt während des Compilierens von TEST den Stackzustand in hex wieder und lässt keinerlei Spuren davon in TEST zurück.

Das letzte Wort

BN #16 . [rtn] 16  ok
Wie schon gesagt, kann man in manchen Forthsystemen mit einem einer Zahl vorangestellten speziellen Zeichen die Basiszahl außer Kraft setzen (# für dezimal, $ für hexadezimal und % für binär). Nachdem BN seinen Einfluss geltend gemacht hat, kommt der Gartenzaun an die Reihe. Der Gartenzaun hat das letzte Wort ... und gewinnt.

einde
 >>