Mis päev on täna?
Lewis Carolli raamatust "Alice mõistatustemaal" pärinev
probleem on heaks konseptuaalse analüüsi harjutusülesandeks.
Ühel päeval ei suutnud Alice kuidagi meenutada, milline nädalapäev
on täna. Ta oleks saanud seda küsida oma sõpradelt lõvilt
või ükssarvelt, kuid nende vastusele ei võinud kunagi
kindel olla, sest igal esmaspäeval, teisipäeval ja kolmapäeval
lõvi vale tas (teistel päevadel ta rääkis tõtt);
ükssarv taas valetas igal neljapäeval, reedel ja laupäeval.
Alice oli nutikas tüdruk ja esitas sõpradele küsimuse:
"Mida sa tegid eile - valetasid või rääkisid tõtt?"
Vastuse põhjal (mõlemad väitsid, et olid eile valetanud)
suutis Alice otsustada, mis nädalapäev parajasti on.
Probleemi esitamisel Prologile tuleb kindlasti kirjeldada, kes millal
valetas:
valetab(lovi, esmaspaev).
- valetab(lovi, teisipaev).
- valetab(lovi, kolmapaev).
- valetab(ykssarv, neljapaev).
- valetab(ykssarv, reede).
- valetab(ykssarv, laupaev).
Lahenduse otsimiseks on oluline ka nädalapäevade järjekord
(muidu ei ole mõistetav muutuja Eile).
eelmine(esmaspäev, pyhapaev).
- eelmine(teisipäev, esmaspaev).
- eelmine(kolmapaev, teisipaev).
- eelmine(neljapaev, kolmapaev).
- eelmine(reede,neljapaev).
- eelmine(laupaev, reede).
- eelmine(pyhapaev,laupaev).
Tundmatul nädalapäeval Tana
võib keegi Olend (lõvi
või ükssarv) väita, et ta eile valetas kahel juhul:
a) kui ta täna ei valeta, siis pidi ta eile tõesti valetama
ytleb_et_valetas(Olend,Tana):-
- eelmine(Tana,Eile),
- not(valetab(Olend,
Tana)),
- valetab(Olend, Eile).
b) ta valetab täna ja rääkis eile tegelikult tõtt:
ytleb_et_valetas(Olend,Tana):-
- valetab(Olend, Tana),
- eelmine(Tana,Eile),
- not(valetab(Olend, Eile)).
Eelnevas on oluline lausete järjekord. Eituse argumendis ei või
(sellel hetkel, kui Prologi otsimismehhanism jõuab eitust sisaldava
lauseni) kunagi esineda muutujaid (mis on muutuja tõeväärtus?),
sellepärast peab lausele
not(valetab(Olend, Täna))
eelnema
lause eelmine(Täna,Eile),
sest selle lausega saavad muutujad Tana,
Eile konkreetsed väärtused.
Tundmatu nädalapäeva Tana
leidmiseks jääb üle vaid anda päring:
? ytleb_et_valetas(lovi,Tana), ytleb_et_valetas(ykssarvi,Tana).
Mis tuleb muutuja Tana
väärtuseks?
Ülesanne
Millisel päeval (päevadel) oleks Alice saanud küsimusele
"Kas Sa räägid homme tõtt?" mõlematelt
kinnituse, et nad räägivad homme tõtt? (koosta lahendamiseks
vajalik predikaat)
Küsimused, probleemid:
jaak@cc.ttu.ee
Tagasi loengute sisukorra juurde