206a
<< <> >>

206

De programmeertaal Forth
home
Voorbeeld van een programmeerstijl die voorwaardelijke sprongen vermijdt.

Zonder uitzondering

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 ;
>>