28.10.2014 Views

1tgD67B

1tgD67B

1tgD67B

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!