You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Koodi<br />
Prolog-kielen perusteet<br />
Ohjelmointi voi olla muutakin kuin käskyjen latomista peräkkäin. Prologkielellä<br />
ohjelmoidaan loogisia sääntöjä ja todistellaan teoreemoja.<br />
Teksti: Antti J. Ylikoski Kuvat: Mitol Berschewsky<br />
Prolog-kielen nimi tulee ranskan<br />
kielen sanoista programmation<br />
en logique, suomeksi ’ohjelmointi<br />
logiikan keinoin’. Kieli syntyi vuosikymmeniä<br />
kestäneen logiikkaohjelmoinnin<br />
tutkimuksen ja käytännön kokemuksen<br />
tuloksena. Prolog on yksi vanhimmista<br />
logiikkaohjelmointikielistä ja niistä kaikkein<br />
tunnetuin.<br />
Prologia on käytetty ensisijaisesti<br />
tekoälyn piirissä ja asiantuntijajärjestelmien<br />
ohjelmoinnissa. Niissä tietokoneohjelma<br />
pyrkii toimimaan kuin ihmisasiantuntija,<br />
joka tekee päätöksiä laajan<br />
tietämyksen ja kokemuksen perusteella.<br />
Prologia on käytetty myös luonnollisten<br />
kielten käsittelemiseen. Kieli on kuitenkin<br />
yleiskäyttöinen ja soveltuu moniin<br />
muihinkin tehtäviin.<br />
Watson<br />
Yhdysvalloissa tv-tietokilpailu Jeopardyssa<br />
oli yhtenä osanottajana Watson eli<br />
IBM:n laatima tietokoneen ja ohjelmiston<br />
yhdistelmä. Watson voitti tietokilpailussa<br />
ihmiskilpailijat, mitä pidettiin tärkeänä julkisuusansiona<br />
IBM:n ja tekoälyn kannalta.<br />
Watsonin tekoäly oli ohjelmoitu Prologkielellä.<br />
Tämä artikkeli esittelee lyhyesti Prolog-kielen<br />
syntyhistorian sekä kielen keskeiset<br />
piirteet. Myös logiikkaohjelmoinnin<br />
alkeisiin tutustutaan.<br />
Kielen synty<br />
Prolog-kieli syntyi 1970-luvun alkupuolella.<br />
Sen keksijänä pidetään ranskalaista<br />
Alain Colmeraueria, jonka apuna<br />
työskenteli Philippe Roussel. He olivat<br />
kiinnostuneita luonnollisten kielten käsittelystä<br />
ja sovelsivat siihen automaattisia<br />
teoreemantodistustekniikoita.<br />
Varhaisessa vaiheessa Prologin kehitykseen<br />
osallistuivat myös Jean Trudel ja<br />
Robert Kowalski, joiden avulla kehitettiin<br />
logiikkakielen päättelysääntöä, niin sanottua<br />
resoluutioalgoritmia. Itse algoritmi<br />
oli pääosin peräisin jo vuodelta 1965 ja<br />
perustuu Alan Robinsonin tutkimuksiin.<br />
Myös Robinson tutki logiikkaohjelmointia.<br />
Hän ymmärsi, että automaattisessa<br />
teoreemojen todistamisessa kannattaa<br />
erottaa toisistaan päättelysääntö (resoluutio)<br />
ja puutietorakenteiden samankaltaisuuden<br />
tutkimisalgoritmi (unifiointi).<br />
Prolog-kielellä on lopulta hyvin monia<br />
kehittäjiä, ja siksi se onkin kehittynyt<br />
monin eri tavoin 70-luvun alun jälkeen.<br />
Kehittäjien yhteisenä tarkoituksensa on<br />
ollut logiikan soveltaminen ohjelman suoritukseen<br />
siten, että ohjelman suoritus<br />
voidaan nähdä teoreeman todistamisena.<br />
Myöhemmin Prologista on pyritty<br />
tekemään yleiskäyttöinen logiikkaohjelmointikieli,<br />
jota voi käyttää suurten ja<br />
vaativien ohjelmistojen kirjoittamiseen.<br />
Prolog on siis levinnyt akateemisen maailman<br />
ulkopuolellekin, esimerkiksi teollisuuden<br />
ja kaupan aloille.<br />
Uudet ajattelutavat<br />
Tavanomaiset ohjelmointikielet toimivat<br />
käskyperiaatteella, imperatiivisesti. Ohjelman<br />
suoritus nähdään peräkkäisinä<br />
käskyinä, jotka muokkaavat ohjelman<br />
tai laitteiston tilaa. Niissä suoritetaan<br />
lauseita ja lausekkeita, sijoitetaan arvoja<br />
muuttujiin, määritellään ja kutsutaan<br />
funktioita ja niin edelleen.<br />
Prolog-kielessä ja logiikkaohjelmoinnissa<br />
ohjelman suorittaminen nähdään<br />
teoreeman todistamisena. Ohjelmoija kuvaa<br />
logiikan keinoin käsillä olevan ongelman<br />
tai tehtävän. Hän määrittelee sääntöjä<br />
eli predikaatteja, jotka sisältävät<br />
tietoa asioiden välisistä suhteista. Predikaatit<br />
muodostavat tietokannan, joka<br />
toimii ikään kuin ohjelman tietoisuutena.<br />
Kun tietokanta on valmis, ohjelmoija<br />
16 2014.2