206a
<<   <>   >>

206

Die Programmiersprache Forth
home
Beispiel eines Programmierstils, der bedingte Sprünge vermeidet.

Ohne Ausnahme

Wenn man x mit y malnimmt, lautet das Ergebnis y*x, es sei denn, dass dabei eine 0 oder eine 1 beteiligt ist:
: MAL ( x y -- y*x ¦ x ¦ y )
  OVER 0= OVER 1 = OR IF DROP ELSE
  OVER 1 = OVER 0= OR IF NIP ELSE *
  THEN THEN ;
Völlig richtig, es geht aber auch einfacher:
: MAL ( x y -- y*x ) * ;
Hiermit will ich demonstrieren, dass nicht immer, wenn etwas eine Ausnahme zu sein scheint, eine Sonderbehandlung dafür nötig ist. Aber so einfach wie mit MAL geht das natürlich nicht immer.
Im unten stehenden Programm habe ich so viele Sonderfälle wie möglich dadurch beseitigt, ( **), dass ich sie zu Normalfällen zurechtgebogen habe. Es treten keine bedingten Sprünge mehr auf, und der Weg, den das Programm durchläuft, kann dadurch leichter verfolgt werden.
Das einzige Zugeständnis ist UNTIL am Ende von SPIEL.
Forth file: gc206.frt

\ ----- Schiebespiel -----
\ Der Spieler schiebt die Steinchen
\ in die "richtige" Reihenfolge.

MARKER -SPIEL

: CHAR-ARRAY ( anzahl <name> -- ) \ Definierendes Wort
  CREATE C,
  HERE 1- C@ 1+ ALLOT ALIGN \ Max. Laenge?    ( **)
  DOES> ( nr -- adr )
  COUNT ROT UMIN + ;        \ Range?          ( **)

16 CHAR-ARRAY BRETT \ 15 Zeichen und ein leeres Feld
0 VALUE HIER        \ Leerfeldposition (Zwischenraum)

: ENDSTAND ( -- )
  S" VIJGEBLAD*FORTH " 0 BRETT SWAP MOVE
  15 TO HIER ;

\ Anm. d. Uebers.:
\ VIJGEBLAD = Vereinszeitschrift der Forth-gebruikersgroep,
\ der niederlaendischen Forth-Gesellschaft.
>>