7) Logičko programiranje u Prologu Flashcards
Objasniti deklarativno programiranje i logičko programiranje
Logičko programiranje: uporaba logičkog zaključivanja kao načina programiranja
Osnovna ideja: definirati problem kao skup logičkih formula, zatim dati računalu da riješi problem (izvodenje programa = zaključivanje)
Deklarativno programiranje: Opisuje što se izračunava umjesto kako se izračunava
Glavne značajke deklarativnih programskih jezika:
I eksplicitno stanje umjesto implicitnog
I nema popratnih efekata (engl. side effects) ili su oni graničeni
I programiranje s izrazima
Prednosti: formalna konciznost, visok stupanj apstrakcije,
pogodno za formalnu analizu, manje pogrešaka
Nedostatci: neučinkovitost, strma krivulja učenja, nije široko
prihvaćeno
Definirati Hornovu klauzulu i definitnu klauzulu te navesti primjere za svaku
Hornova klauzula je klauzula (disjunkcija literala) s najviše jednim pozitivnim literalom:
¬P1 ∨ ¬P2 ∨ · · · ∨ ¬Pn ∨ Q
ili, ekvivalentno:
(P1 ∧ P2 ∧ · · · ∧ Pn) → Q
Negativni literali čine tijelo klauzule, dok pozitivan literal čini glavu.
Definitna klauzula je Hornova klauzula s točno jednim
pozitivnim literalom. Svaka definitna klauzula definira pravilo zaključivanja ili činjenicu.
Hornove klauzule zatvorene su pod rezolucijom: rezolventa dviju Hornovih klauzula i sama je Hornova klauzula
Odrediti je li zadana PL i FOL formula Hornova ili definitna klauzula
Hornova: ima najviše 1 pozitivan literal
Defintina: ima točno 1 pozitivan literal
Objasniti i ilustrirati rezoluciju s ulančavanjem unazad nad Hornovim klauzulama
Razrješavam negirani cilj nekom klauzulom, pa to što dobijemo razrješavamo nekom drugom klauzulom. Ako slučajno nemamo što za razriješiti, backtrackamo na točku prije i tražimo možemo li nju nečime razriješiti.
Razlikovati izmedu činjenica i pravila u Prologu
Pravilo označava implikaciju i piše se kao
mortal(X) :- human(X). (konzekvent :- antecedens.) Moće u sebi imati uvjete i disjunkcije
Činjenica je predikat koji se odnosi na neku varijablu i piše se kao
human(socrates).
Imamo još upite i oni su oblika kao
?- human(socrates).
Napisati FOL formulu u Prologu i obrnuto
lijepo odvojiti predikate i varijable i pravila i činjenice
, je i a i b c == c :- a, b.
; je ili a ili b c == c :- a; b.
Skicirati Prologovo stablo pretraživanja za zadani logički program i cilj
Broj čvorova je korijen + čvorovi. Ako u neki čvor treba nešto uvrstiti, što nije već tu, onda se stvara novi čvor samo s tom formulom koja ne postoji.
Napisati program u Prologu za jednostavan problem s rekurzijom i negacijom
Literal not(P(x)) je istinit ako se ne može dokazati P(x), inače je lažan.
rekurzivno definirani predikat se javlaja kad se u definiciji javlja isti pojam koji pokušavamo definirati, ali s drugim argumentima. npr.
follower(X, Y) :- % osnovna klauzula
disciple(X, Y).
follower(X, Y) :- % rekurzivna klauzula
disciple(X, Z),
follower(Z, Y).
Definirati i objasniti negaciju kao neuspjeh i pretpostavku zatvorenog svijeta
Literal not(P(x)) je istinit ako se ne može dokazati P(x), inače je lažan.
Sve što se ne može dokazati (činjenice koje nisu u bazi znanja i koje se iz ne mogu izvesti) je lažno.
Objasniti i ilustrirati dva nedeklarativna aspekta Prologa
Redoslijed klauzula kod rekurzije je bitan
2. Operator not se ponaša drugačije nego u logici i označava da je not(P(x)) istinit
onda kada se P(x) ne može dokazati (npr. nije definiran) a inače je lažan.