|
| ||||
|
Input en Output |
Typ 24 en druk op [enter]
24 [enter] okForth antwoordt met "ok". Kennelijk geen problemen. Maar wat is er nu gebeurd? Forth accepteert losse getallen en onthoudt ze.Nog een getal: 100 [enter] okWat 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 okAndere mogelijkheden: 1 + [enter] okLetterlijk: 1 erbij optellen. Waarbij op? Laten we eerst maar eens kijken wat de punt in deze situatie oplevert: . [enter] 25 okHet 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:
|
Sommetjes |
100 7 + . [enter] 107 ok 10 20 30 40 + . + . [enter] 70 30 okIn 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 okHet 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 okNu 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 |