Prolog ja deklaratiivne programmeerimine

Sügis 1999: loengud ja harjutused teisipäeviti 8.00-11.30 (kuulajate vähesuse tõttu ühendatakse kaks rühma).
Kursuses kasutatava Prolog-i saab siit (saadaval nii Windows-i kui ka Linux-i versioon!).

Kursuse sooritamiseks tuleb teha 2 kontrolltööd: 21.10 ja 12.12 (järeltöid ei toimu!)

Kursuse sisu:

Sissejuhatus (Deklaratiivne programmeerimine)
Loeng 1: Faktid ja reeglid, päring
Loeng 2: Päring, eesmärk
Loeng 3: Programmi semantika
Loeng 4: AMZI-Prologi kasutajaümbrus
Loeng 5: Loomulik keel -> Prologi laused
Loeng 6: 80 päevaga ümber maailma
Loeng 7: Mis päev on täna?
Loeng 8: Tee otsimine labyrindis
Loeng 9: Prologi andmetüübid
Loeng 10: Nimistud
Loeng 11: AMZI-Prologi primitiivid
Loeng 12: Nimistute käsitlemine
Loeng 13: Veelkord tee kaardil
Loeng 14: Lõpprekursioon

Arvutused ridadega
Loeng 15: Loogiliste skeemide modeleerimine
Kontrolltöö 23.10.98
Loeng 16: Hunt, kits ja kapsad
Loeng 17: Trips-traps-trull
Loeng 18: Morfolooogiline analüüs
Loeng 19: Lihtlause struktuur:
Loeng 20: Verbiliigid
Loeng 21: Silbitamine
Loeng 22: Arvsõnade interpreteerimine
Loeng 23: Sisendite-väljundite ühendamine (routing)
Loeng 24: Ülesandid
Loeng 25: Määratud integraal
Loeng 26: Prologi realiseeringud: Turbo-Prolog
Kontrolltöö 11.12.98


Programmeerimiskeel Prolog (Programming in Logic) erineb oluliselt "tavalistest" programmeerimiskeeltest: Basic, Pascal, C jne.
Igasuguse tõsielu ülesande lahendamine arvutiga koosneb sisuliselt kahest osast. Algul on olemas probleem: keegi (tellija) tahab, et arvuti teeks midagi, suudaks vastata mingitele küsimustele (päringutele) jne; probleem on esitatud loomulikus keeles (eesti, inglise), sageli ebatäpselt, sisaldab loogilisi vastuolusid jms. Et arvutiprogrammini jõuda, toimub ülesande konseptuaalne analüüs: milline informatsioon on olemas, mida tahetakse saada, kas olemasoleva informatsiooni põhjal on üldse võimalik leida nõutud info jne. Samm-sammult täpsustatakse probleemi olemust (mida õieti on vaja teha) ja selle esitusviisi arvutis: kuidas (milliste suurustega) kodeerida lähteandmed, milleid andmestruktuure kasutata jne.
Ülesande lahendamise teine etapp: programmeerimine Basicus, Pascalis, C-s või mõnes muus käsukeeles (imperative language) saab alata alles siis, kui ülesande konseptuaalne sisu on täiesti arusaadav. Basicus, Pascalis või C-s koostatud programm kirjeldab arvutile, mida see peab tegema lahenduseni jõudmiseks:

anna muutuja S väärtuseks 0

korda kuni tabel A on läbitud:
lisa muutuja S väärtusele tabeli A järgmine arv

Programmi lugedes ei ole tavaliselt üldse enam arusaadav, millise tegelikkuse probleemi lahendamiseks see oli koostatud; tegelikkuse objektid (isikud, kaubad, ajahetked ja nendevahelised suhted) on asendatud arvutimuutujatega, ja tegelikkuse objektide vahelised suhted (sugulassuhted, kaugused, algusajad jne) - arvutimuutujate andmestruktuuride ja nende manipulatsioonidega.
Loomulikult on programmi tegemisel eelduseks, et programmeerijale on ülesande konseptuaalne sisu (mida täpselt peab tegema lahenduseni jõudmiseks) täiesti selge - muidu ei oleks võimalik tegelikkuse probleemi asendada muutujate manipulatsiooniga. Kuna see esimene, konseptuaalse analüüsi etapp on programmeerimisest oluliselt keerukam, jäetakse see programmeerimisõpetuses sageli üldse kõrvale ja tegelikkuse probleemide lahendamise asemel koostatakse mänguprogramme, mis lahendavad programmeerimiskeskonna probleeme (tee programm, mis küsib kasutaja nime ja toob siis ekraanile teksti "Tere, Juku").
Prologis programmeerides on peatähelepanu just ülesande konseptuaalse sisu analüüsimisel; Prologi programm kirjeldab tegelikkuse objekte ja nendevahelisi suhteid. Sellepärast nimetataksegi Prologi deklaratiivseks, kirjeldavaks keeleks (declarative language). Paljud tavaliste, imperatiivsete programmeerimiskeelte elemendid, näiteks ülaltoodud programminäites kasutatud tsüklikonstruktsioonid (do until, do while, step jms) Prologis puuduvad (nad on vajalikud arvuti töö, mitte tegelikkuse probleemi kirjeldamisel).
Prologi kasutataksegi peamiselt raskesti arusaadavate tehisintellekti probleemide lahendamisel - tee otsimisel kaardil või labürindis, planeerimisülesannete lahendamisel, loomuliku keele analüüsil jne. Prologis programmeerimine on hea sissejuhatus konseptuaalsesse analüüsi.