Programmi semantika (tähendus)
Prologi programm:
tytar_on(uranos,rhea).
tytar_on(kronos,hera).
poeg_on(uranos,okeanos).
poeg_on(uranos,iapetos).
poeg_on(uranos,kronos).
poeg_on(kronos,zeus).
poeg_on(iapetos,atlas).
kirjeldab isa-tütar, isa-poeg suhteid, kasutades formaati
tytar_on(Isa, Tütar).
poeg_on(Isa, Poeg).
s.t. tytar_on, poeg_on on mõlemad
kahekohalised (kahe argumendiga) predikaadid, mille esimesel kohal (esimene
argument) on isa ja teisel vastavalt tütre või poja nimi. Argumendid
(isad, pojad, tütred) on konkreetsed isikud, s.t. konstandid, sellepärast
tuleb nad kirjutada väikese tähega!
Reegel
pojapoeg(Vanaisa,Pojapoeg) :-
poeg_on(Vanaisa,Isa),
poeg_on(Isa,Pojapoeg).
-- Koma: "," asemel võib kasutada ka sõna
"ja", kui enne on laaditud kas moodul eesti.pro
või eesti.plm vastavalt käsuga consult('eesti.pro'),
consult('eesti.plm')
ütleb, et isik Vanaisa (ükskõik
kes, s.t. muutuja) on mingi teise isiku Pojapoeg
pojapoeg (s.t. need kaks isikut on suhtes pojapoeg
), kui leidub (kolmas) isik Isa(muutuja),
kes on isiku Vanaisa poeg ja isiku
Pojapoeg isa (s.t. isikute Vanaisa,
Isa vahel on suhe poeg_on,
ja isikute Isa, Pojapoeg vahel on
samuti suhe poeg_on).
Kuidas suhteid kirjeldada - kas predikaadi nimeks valida poeg_on
või lihtsalt poeg, kas esimene
argument on isa ja teine poeg või vastupidi - see on programmeerija
otsustada. Vigu tuleb vähem, kui järgitakse loomuliku keele süntaksit.
Eesti keeles vastaksid ülaltoodud andmebaasi kirjetele laused
Uranose tütar on Rhea.
Uranose poeg on Okeanos.
Jne.
Predikaat väljendab suhet tegelikkuse objektide vahel, sellepärast
on kõige loomulikum predikaadi nimi tavaliselt lause öeldis
või öeldisrühm: tütar on,
poeg on . Kuna predikaadi nimes ei või olla tühikuid,
asendame tühiku allkriipsuga; ülejäänud lauseliikmed
muutuvad predikaadi argumentideks - samas järjekorras, nagu nad esinevad
lauses (ja täppidega tähed tuleb asendada vastavate täppideta
tähtedega!).
Kord valitud süntaksit peab igal pool rangelt jälgima, s.t.
kui isa-poeg suhted on kirjeldatud predikaadiga poeg_on
(nagu ülal), ei oska Prolog kasutada reeglit
pojapoeg(Vanaisa,Pojapoeg) :-
poeg (Vanaisa,Isa),
poeg (Isa,Pojapoeg).
See reegel muutub Prologile arusaadavaks alles siis, kui programmi
on lisatud veel üks reegel (selle võib lisada ükskõik
kuhu, erinevate predikaatide kirjelduste järjekord programmis ei ole
oluline; oluline on sama predikaati kirjeldavate lausete järjekord):
poeg(Isa,Poeg) :- poeg_on(Isa, Poeg).
Küsimused, probleemid:
jaak@cc.ttu.ee
Tagasi loengute sisukorra
juurde