Kirjoittaja: Antti Laaksonen (15.12.2009)
Forth on 1970-luvun alussa kehitetty ohjelmointikieli, jonka keskeinen elementti on lukuja sisältävä pino.
Forth-ohjelmat muodostuvat aliohjelmista, jotka sisältävät joukon suoritettavia komentoja. Tavalliset komennot liittyvät pinon käsittelyyn, ehto- ja toistorakenteisiin sekä aliohjelmien kutsumiseen.
Aliohjelma JOULU
tulostaa rivin tekstiä:
: JOULU ." Hauskaa joulua!" CR ;
Aliohjelman tulostus on seuraava:
Hauskaa joulua!
Aliohjelma FIBOLISTA
tulostaa Fibonaccin lukuja:
: FIBOLISTA 1 0 BEGIN DUP 100 < WHILE DUP . CR OVER + SWAP REPEAT DROP DROP ;
Aliohjelman tulostus on seuraava:
0 1 1 2 3 5 8 13 21 34 55 89
Aliohjelma säilyttää pinossa joka vaiheessa kahta peräkkäistä Fibonaccin lukua. Ensin aliohjelma lisää pinoon luvut 1 ja 0. Sitten aliohjelma toistaa silmukkaa niin kauan kuin pinon ensimmäinen luku on alle 100. Silmukassa aliohjelma tulostaa pinon ensimmäisen luvun ja laskee pinoon yhtä suuremmat Fibonaccin luvut.
Seuraava komentosarja havainnollistaa pinon käsittelyä:
komento | selitys | pinon sisältö | tulostus |
---|---|---|---|
5 | uusi luku pinoon | 5 | |
2 | uusi luku pinoon | 2, 5 | |
6 | uusi luku pinoon | 6, 2, 5 | |
+ | 1. ja 2. luvun summa | 8, 5 | |
DUP | 1. luvun kopiointi | 8, 8, 5 | |
7 | uusi luku pinoon | 7, 8, 8, 5 | |
* | 1. ja 2. luvun tulo | 56, 8, 5 | |
. | 1. luvun tulostus | 8, 5 | 56 |
3 | uusi luku pinoon | 3, 8, 5 | |
SWAP | 1. ja 2. luvun kääntö | 8, 3, 5 | |
OVER | 2. luvun kopiointi | 3, 8, 3, 5 | |
+ | 1. ja 2. luvun summa | 11, 3, 5 | |
+ | 1. ja 2. luvun summa | 14, 5 | |
. | 1. luvun tulostus | 5 | 14 |
DUP | 1. luvun kopiointi | 5, 5 | |
* | 1. ja 2. luvun tulo | 25 | |
3 | uusi luku pinoon | 3, 25 | |
SWAP | 1. ja 2. luvun kääntö | 25, 3 | |
DROP | 1. luvun poisto | 3 | |
DROP | 1. luvun poisto |
Forthin suunnittelija Charles H. Moore piti kieltä neljännen sukupolven ohjelmointikielenä, minkä vuoksi luonteva nimi kielelle olisi ollut Fourth. Kuitenkin Mooren käyttämässä tiedostojärjestelmässä nimen maksimipituus oli viisi merkkiä ja kirjain u jäi pois nimestä.