1


Prolog (Programming in Logic)

Prologi programm kirjeldab tegelikkuse fakte, suhteid (Prologi terminoloogias - predikaate) tegelikkuse objektide (konstantide) vahel; järgnevas programmilõigus vöib iga rida vaadelda kui kirjet andmebaasitabelites, mis kirjeldavad, kes on kelle tütar või poeg:

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).

Fakti süntaks:

Fakt -> suhtenimi(argument{ , argument}).
-- Süntaksikirjeldustes loogeliste sulgude vahel olev osa võib korduda 0,1,2,... korda!

suhtenimi -> SUURTÄHTEDETA_STRING
argument -> SUURTÄHTEDETA_STRING

-- AMZI-Prolog ei salli "täppidega tähti", sellepärast on kõik täppidega tähed asendatud vastava täppideta tähega!

Programmis võivad esineda ka reeglid, mis defineerivad olemasolevate suhete alusel uusi:

pojapoeg(Vanaisa,Pojapoeg) :-
poeg_on(Vanaisa,Isa) ja poeg_on(Isa,Pojapoeg).
-- Reegli lugemisel asenda sümbol ":-" sõnadega "siis kui "
-- Sõna "ja" asemel kasutatakse tavaliselt koma ","
-- Sõna "ja" kasutamiseks (AMZI-Prologis) tuleb enne laadida kas moodul
eesti.pro või eesti.plm (eelmise kompileeritud kuju) käsuga consult('eesti.pro') või consult('eesti.plm')
--
Predikaadi nime ja järgneva sulu vahel ei või kunagi olla tühikut, s.t. poeg_on (Vanaisa,Isa) tekitab juba laadimisel vea!

Reegli süntaks:

Reegel -> Suhe :- Suhe{ , Suhe}.
-- Sõnad "ja" ja koma "," reegli paremal pool on samaväärsed!

Suhe -> suhtenimi(argument_või_muutuja{ , argument_või_muutuja}).
argument_või_muutuja -> STRING| _STRING
-- Püstkriips tähistab süntaksikirjeldustes valikut, s.t. argument või muutuja võib olla kas suvaline string (võib alata suurtähega) või allkriipsuga "_" algav string

Kõik programmilaused (faktid ja reeglid) lõpevad punktiga. Suur algustäht on Prologis muutuja tunnus; muutujad on ka allkriipsuga algavad sõnad, näiteks _isa.

Prolog oskab sisestatud programmi põhjal vastata küsimustele (päringutele).

1. Loetle kõik Uranose pojad:

? poeg_on(uranos,X).
X=okeanos
X=iapetos
X=kronos

2. Loetle kõik Uranose pojapojad:

? pojapoeg(uranos,X).
X=atlas
X=zeus

3. Kes oli Hera ema:

? tytar_on(X, hera).
X=kronos


Küsimused, probleemid:

jaak@cc.ttu.ee

Tagasi loengute sisukorra juurde