HCC!Forth
27 nov 2002


Rekenen in Forth

Albert Nijhof
1. Rekenen in Forth
2. Programmeren in Forth
3. Definiėrende woorden
4. Compilerende woorden

Input en Output

Typ 24 en druk op [enter]
 24 [enter]  ok
Forth antwoordt met "ok". Kennelijk geen problemen. Maar wat is er nu gebeurd?
Forth accepteert losse getallen en onthoudt ze.

Nog een getal:

 100 [enter] ok
Wat heb je daar nu aan?
Met het commando «.» (punt) kunt je "het bovenste getal", afdrukken op het scherm. Het bovenste getal is het getal dat het laatst binnengekomen is.
 . [enter] 100  ok
Andere mogelijkheden:
 1 + [enter] ok
Letterlijk: 1 erbij optellen. Waarbij op?
Laten we eerst maar eens kijken wat de punt in deze situatie oplevert:
 . [enter] 25  ok
Het getal 24 waar we mee begonnen zijn, stond er dus nog steeds en daar is die 1 bij opgeteld.
Forth bewaart getallen op volgorde van binnenkomst, ze staan "op stack". Die getallen worden weer afgegeven aan acties die behoefte hebben aan een getal. Het bovenste getal wordt altijd als eerste gebruikt (verbruikt).
Het commando «.» (punt) is een voorbeeld van zo'n actie dat een getal consumeert.
Getallen "op stack" worden afgehandeld volgens het LiFo-beginsel:
Last in First out.
 1 2 3 4 5 . . . . . [enter] 5 4 3 2 1  ok

Sommetjes

 100 7 + . [enter] 107  ok
 10 20 30 40 + . + . [enter] 70 30  ok
In het laatste voorbeeld wordt eerst 40 bij 30 opgeteld en de punt laat het resultaat zien. Vervolgens gebeurt hetzelfde met de twee overgebleven getallen 10 en 20. In een schema:

Stack vooraf Actie Stack resultaat
10 20 30 40 + 10 20 70
10 20 70 . 10 20
10 20 + 30
30 .  

De actie «+» haalt het bovenste getal weg en telt hem op bij het eronderstaande getal.
 100 10 + [enter] ok
 1 + [enter] ok
 . [enter] 111  ok
Het resultaat kun je zichtbaar maken met de punt. Maar het is dan wel verdwenen van de stack.

De volgende voorbeelden behoeven waarschijnlijk geen commentaar:

 100 1 - . [enter] 99  ok
 200 7 * . [enter] 1400  ok
 280 4 / . [enter] 70  ok
Nu enkele ingewikkelder voorbeelden:
 100 1 + 4 * .
 4 100 1 + * .
 800 2 / 4 + .
 400 400 100 / + .
 50 100 102 152 + + + .
 404 404 404 + - .
 404 404 404 - + .
 101 101 + 101 + 101 + .
Je zult ondertussen wel gemerkt hebben dat het antwoord steeds 404 is, behalve...

Hoe zou je de volgende berekeningen in Forth uitvoeren?

 3 * ( 8 + 7 ) = ...
 ( 10 + 6 ) * ( 20 - 4 ) = ...
 100 / ( 13 + 7 ) = ...
Antwoorden:
 8 7 + 3 * .     of    3 8 7 + *
 10 6 + 20 4 - * .
 100 13 7 + / .
Berekeningen met haakjes, hoe ingewikkeld ook, kunnen in Forth altijd uitgeschreven worden zonder haakjes. Forth heeft daarvoor geen syntax nodig.
1. Rekenen in Forth
2. Programmeren in Forth
3. Definiėrende woorden
4. Compilerende woorden


© 2007 HCC!Forth