Kirjautuminen

Haku

Tehtävät

Joulukalenteri 2009: Forth

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.

Esimerkki: Tekstin tulostus

Aliohjelma JOULU tulostaa rivin tekstiä:

: JOULU
   ." Hauskaa joulua!" CR ;

Aliohjelman tulostus on seuraava:

Hauskaa joulua!

Esimerkki: Fibonaccin luvut

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.

Esimerkki: Pinon käsittely

Seuraava komentosarja havainnollistaa pinon käsittelyä:

komentoselityspinon sisältötulostus
5uusi luku pinoon5
2uusi luku pinoon2, 5
6uusi luku pinoon6, 2, 5
+1. ja 2. luvun summa8, 5
DUP1. luvun kopiointi8, 8, 5
7uusi luku pinoon7, 8, 8, 5
*1. ja 2. luvun tulo56, 8, 5
.1. luvun tulostus8, 556
3uusi luku pinoon3, 8, 5
SWAP1. ja 2. luvun kääntö8, 3, 5
OVER2. luvun kopiointi3, 8, 3, 5
+1. ja 2. luvun summa11, 3, 5
+1. ja 2. luvun summa14, 5
.1. luvun tulostus514
DUP1. luvun kopiointi5, 5
*1. ja 2. luvun tulo25
3uusi luku pinoon3, 25
SWAP1. ja 2. luvun kääntö25, 3
DROP1. luvun poisto3
DROP1. luvun poisto

Hauska tietää

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ä.

Linkkejä

Tietoa sivustosta