Kursuse sooritamiseks tuleb teha 2 kontrolltööd: 23.10 ja 11.12 (järeltöid ei toimu!)
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
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: Analüütiline differentseerimine ja avaldise lihtsustamine
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
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.