Als je
x met
y vermenigvuldigt is het antwoord
y*x tenzij
er een
0 of een
1 bij betrokken is:
: MAAL ( x y -- y*x | x | y )
OVER 0= OVER 1 = OR IF IF DROP EXIT THEN
OVER 1 = OVER 0= OR IF IF DROP EXIT THEN
* ;
Maar het kan eenvoudiger:
: MAAL ( x y -- y*x ) * ;
Hiermee wil ik illustreren dat wanneer iets een uitzondering lijkt te zijn,
er niet altijd een speciale behandeling voor nodig is.
Maar zo simpel als met
MAAL gaat dat meestal niet.
In onderstaand programmaatje heb ik zoveel mogelijk uitzonderingen
weggewerkt
( **) door ze om te buigen tot reguliere acties.
De route die het programma aflegt is daardoor gemakkelijk te volgen want er staan
geen voorwaardelijke sprongen meer in.
De enige concessie is
UNTIL aan het eind van
SPEEL.
Forth file: c206.frt
\ Schuifspelletje (Albert Nijhof)
\ De speler schuift de blokjes in de goede stand.
FORTH DEFINITIONS DECIMAL
: CHAR-ARRAY ( amount -- ) \ Definiërend woord
CREATE 255 UMIN \ Max. lengte? ( **)
DUP C, 1+ ALLOT ALIGN
DOES> ( index -- address )
COUNT ROT UMIN + ; \ Range? ( **)
16 CHAR-ARRAY BORD \ 15 tekens en een lege plek
0 value HIER \ Positie vd lege plek (spatie)
: EINDSTAND ( -- )
S" VIJGEBLAD*FORTH "
DUP 1- TO HIER
0 BORD SWAP MOVE ;