208a
<< <> >>

208

Die Programmiersprache Forth
home

CATCH und THROW I

Leo: Das letzte Mal hast du die Begriffe Signed und Unsigned erläutert. Könntest du mir heute etwas über THROW erzählen? Ich weiß, dass THROW eine Zahl auf dem Stack erwartet. Wenn das eine Null ist, passiert nichts. Bei anderen Werten verlässt Forth das Programm und setzt manchmal eine Fehlermeldung auf den Bildschirm mit der Mitteilung, dass das die Message Nummer soundso ist. Das Ergebnis beispielsweise von
-14 THROW
ist
Compile-only word (message # -14)
Darüber gibt es bestimmt mehr zu erzählen.
Theo: Gut. Ich hol mal etwas aus. Du hast EXECUTE bereits kennen gelernt. Kannst du vorhersagen, was das Folgende tut?
17 ' DUP EXECUTE .S
Leo: Das ist leicht. ' (Tick) sucht DUP auf, und EXECUTE führt dieses DUP aus. Das Ganze arbeitet also wie DUP.
[rtn] ( 17 17 ) ok
Theo: Genau. Ich mach erst mal noch ein Wort, das ... oder nein, krieg mal heraus, was BS macht:
: BS BEGIN DEPTH 0> WHILE DROP REPEAT ;
Leo: Solange DEPTH größer als Null bleibt, wird gedropt, BS säubert also den Stack.
Theo: O.K. Nun Puzzle Nr 1. Was macht:
BS 1 ' DUP CATCH .S
Ich gebe dir den Hinweis, dass CATCH hier beinahe dieselbe Wirkung hat wie EXECUTE. Der Unterschied besteht darin, dass CATCH nach Ablauf noch eine Null auf den Stack legt. Überleg dir die Antwort, bevor du auf [rtn] drückst.
>>