Leo: |
De vorige keer heb je de begrippen Signed en Unsigned uit de doeken gedaan.
Zou je me vandaag iets willen vertellen over THROW?
Ik weet dat THROW een getal op stack verwacht.
Als dat een nul is gebeurt er niets.
Bij andere waarden verlaat Forth het programma en zet soms een foutmelding
op het scherm met de mededeling dat dit message nummer zoveel is.
Bijvoorbeeld, het resultaat van -14 THROW is
Compile-only word (message # -14)
Daar is vast meer over te vertellen.
|
Theo: |
Goed. Ik maak even een omweggetje.
Je hebt EXECUTE al leren kennen.
Kun je voorspellen wat het volgende zal doen?
17 ' DUP EXECUTE .S
|
Leo: |
Dat is gemakkelijk.
' (Tick) zoekt DUP op, en EXECUTE voert die DUP uit.
Het geheel werkt dus als DUP.
[rtn] ( 17 17 ) ok
|
Theo: |
Juist. Ik maak eerst even een woordje dat ... of nee,
stel jij maar vast wat VB doet:
: VB BEGIN DEPTH 0> WHILE DROP REPEAT ;
|
Theo: |
Zolang DEPTH groter dan nul blijft wordt er gedropt,
dus VB maakt de stack schoon.
|
Theo: |
O.K. Nu puzzel nr 1. Wat doet:
VB 1 ' DUP CATCH .S
Ik vertel er bij, dat CATCH hier bijna hetzelfde effect heeft als EXECUTE.
Het verschil is, dat CATCH na afloop nog een nul op de stack plaatst.
Bedenk het antwoord voordat je op [rtn] drukt.
|