Kirjoittaja: Antti Laaksonen (01.12.2009)
Tervetuloa Ohjelmointiputkan joulukalenteriin!
Joulukalenterin jokaisessa luukussa esitellään ohjelmointikieli, jossa on jotakin kiinnostavaa ja merkittävää, mutta joka ei ole saanut syystä tai toisesta jalansijaa Ohjelmointiputkassa.
Joulukalenterin aloittaa kunniakkaasti Algol, joka on toiminut esikuvana sellaisille nykyään tunnetuille kielille kuin C ja Pascal.
Algol-kielen kehitys alkoi 1950-luvun lopussa, ja sen tärkein määrittely Algol 60 on vuodelta 1960. Algolia käytettiin erityisesti yliopistoissa ohjelmoinnin opetuksessa ja tutkimuksessa.
Algol muistuttaa paljon nykyaikaisia proseduraalisia ohjelmointikieliä: käytössä ovat ehtorakenteet, silmukkarakenteet ja aliohjelmat. Algolin suunnittelussa tavoitteena on ollut kielen helppokäyttöisyys sekä soveltuvuus laskennallisiin tehtäviin.
Seuraava ohjelma tulostaa tekstiä:
begin print 'Tervetuloa joulukalenteriin!' end
Algol 60 -määrittely ei ota kantaa tekstin tulostukseen, minkä vuoksi eri Algol-toteutuksissa on eri tapoja tulostaa tekstiä. Tässä oletetaan, että käytössä on komento print
.
Algol-kielen avainsanat merkitään ohjelmaan muusta koodista poikkeavasti. Merkintätapa riippuu jälleen käytetettävästä Algol-toteutuksesta: tässä avainsanat alleviivataan.
Fibonaccin lukusarja alkaa seuraavasti:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
Kaksi ensimmäistä lukua ovat 0 ja 1, ja niiden jälkeen seuraava luku saadaan laskemalla yhteen kaksi edellistä.
Seuraava ohjelma tulostaa Fibonaccin luvut, jotka ovat alle 100:
begin integer a, b, c; a := 0; b := 1; print a; print b; for c := a + b while c < 100 do begin print c; a := b; b := c end end
Ohjelman tulostus on seuraava:
0 1 1 2 3 5 8 13 21 34 55 89
Algol-kielen erikoisuus ovat aliohjelman nimiparametrit. Jos aliohjelman parametri on nimiparametri, parametrin esiintymät aliohjelmassa korvataan parametriksi annetulla lausekkeella ennen aliohjelman suoritusta.
Seuraavassa ohjelmassa aliohjelman lista
parametrit ovat nimiparametreja. Kun parametriksi lasku
annetaan 3 * x * x + x
, aliohjelman komento tulos := lasku;
muuttuu muotoon tulos := 3 * x * x + x;
.
begin procedure lista(lasku, x); integer lasku, x; begin integer tulos; for x := 1 step 1 until 10 do begin tulos := lasku; print x, tulos end end lista; lista(3 * x * x + x, x) end
Ohjelman tulostus on seuraava:
1 4 2 14 3 30 4 52 5 80 6 114 7 154 8 200 9 252 10 310
Esimerkiksi kun x = 5, lasku on 3x2 + x = 80.
C. A. R. Hoare (pikalajittelun keksijä) totesi Algolista seuraavaa artikkelissaan "Hints on programming language design" vuonna 1973:
"Mitä enemmän pohdin ohjelmointikielten suunnitteluperiaatteita ja tapoja saattaa ne käytäntöön, sitä enemmän Algol 60 hämmästyttää ja herättää kunnioitusta minussa. Tämä kieli on niin edellä aikaansa, että se ei ollut parannus vain edeltäjiinsä verrattuna, vaan myös lähes kaikkiin seuraajiinsa verrattuna."