PROLOG Εισαγωγή (PROgramming in LOGic) Γλώσσα Λογικού Προγραμματισμού Βασίζεται στο Προτασιακό Λογισμό 1 ης τάξης Χρησιμοποιεί προτάσεις Horn αλγόριθμος = λογική + έλεγχος Μέσω της Prolog δίνουμε βάρος στην λογική του αλγορίθμου και λιγότερο στον έλεγχο Η Prolog παρέχει τον βασικό μηχανισμό ελέγχου για την αποτίμηση των εκφράσεων 2 1
Προγραμματίζοντας με την Prolog Ενα «πρόγραμμα» στην Prolog είναι μια διατεταγμένη σειρά από προτάσεις (clauses) Οι προτάσεις έχουν την μορφή Horn και δηλώνουν αλήθειες για τον κόσμο που περιγράφει το πρόγραμμα. Δεδομένου ενός προγράμματος, ένα σύστημα Prolog μπορεί να αποφανθεί για την αλήθεια των κατηγορημάτων που του δίνονται ως ερωτήσεις 3 Γεγονότα (facts) [1/2] Παραδείγματα child(οιδίπους, ιοκάστη). child(αντιγόνη, ιοκάστη). child(ετεοκλής, ιοκάστη). child(πολυνίκης, ιοκάστη). child(οιδίπους, λάιος). child(αντιγόνη, οιδίπους). child(ετεοκλής, οιδίπους). child(πολυνίκης, λάιος). Ερωτήσεις?- child(οιδίπους, λάιος).?- child(αντιγόνη, ετεοκλής). YES NO 4 2
Γεγονότα (facts) [2/2] Δήλωση Παραδείγματα male(λάιος). male(οιδίπους). male(ετεοκλής). male(πολυνίκης). female(αντιγόνη). female(ιοκάστη). married(λάιος, ιοκάστη). married(ιοκάστη, λάιος). married(οιδίπους, ιοκάστη). married(ιοκάστη, οιδίπους). Ερωτήσεις με μεταβλητές?- married(λάιος, X).?- married(ιοκάστη, Χ). X=ιοκάστη X=λάιος ; X=οιδίπους 5 Κανόνες (rules) Παραδείγματα grandchild(x,y) :- child(x,z), child(z,y). parent(x,y) :- child(υ,χ). mother(x,y) :- parent(x,y), female(x). father(x,y) :- parent(x,y), male(x). Ερωτήσεις?- mother(οιοκάστη, αντιγόνη). YES?- father(x, οιδίπους). X=λάιος Επακόλουθο - Προηγούμενα 6 3
Αναδρομικοί κανόνες Παράδειγμα related(x,x). related(x,y) :- married(x,y). related(x,y) :- child(x,z), related(z,y). related(x,y) :- child(y,z), related(z,x). Ερωτήσεις?- related(ετεοκλής, πολυνίκης). YES 7 Ο έλεγχος στην Prolog Βασικές αρχές από αριστερά προς τα δεξιά απο πάνω πρός τα κάτω Ενοποίηση (unification) Παραγωγή υπο-στόχων - τρέχων υπο-στόχος Οπισθοδρόμηση (backtracking) Διάταξη προτάσεων 8 4
Ενοποίηση θ είναι ο πιο γενικός ενοποιητής Ο θ είναι ένα σύνολο απο αντικαταστάσεις που μετατρέπουν την μια έκφραση στην άλλη. Κανόνες Η ελεύθερη μεταβλητή ενοποιείται με οτιδήποτε. Μια σταθερά ενοποιείται με τον εαυτό της. Ένα κατηγόρημα ενοποιείται με ένα άλλο κατηγόρημα που έχει το ίδιο όνομα και τα αντίστοιχα ορίσματα τους μπορούν να ενοποιηθούν. 9 Παραδείγματα ενοποίησης female(x) με female(αντιγόνη) θ={x=αντιγόνη) parent(x,y) µε parent(z, ιοκάστη) θ ={X=Z,Y= ιοκάστη} person(name, date(month,day,year), Sex) µε person( John, date( July, 7, 1993), male) θ ={Name= John,Month= July,Day=7,Year=1993,Sex=male} 10 5
Παράδειγμα αποτίμησης ερώτησης f1: child(οιδίπους,ιοκάστη). f2: child(οιδίπους,λάιος). f3: child(αντιγόνη,ιοκάστη). f4: child(ετεοκλής,ιοκάστη). f5: child(ετεοκλής,οιδίπους). r1: descendant(d,a) :- child(d,a). r2: descendant(d,a) :- child(d,p), descendant(p,a).?-descendant(ετεοκλής λάιος). Δέντρο εκτέλεσης 11 descendant (ετεοκλής, λάιος) r1 r2 child (ετεοκλής, λάιος ) child (ετεοκλής, Χ) descendant (X, λάιος) X=ιοκαστη f4 X=οιδίπους f5 descendant (ιοκάστη, λάιος) descendant (οιδίπους, λάιος) r1 r2 r1 child (ιοκάστη, λάιος) child (ιοκάστη, Χ) descendant (X, λάιος) child (οιδίπους, λάιος) f2 [ ] ΝΑΙ 12 6
PROLOG και Λογική Προτάσεις Horn : διάζευξη με ένα μόνο θετικό κατηγόρημα. Αντιστοιχία εκφράσεων : p:- q1, q2, q3. q1 q2 q3 p p q1 q2 q3 mother(x,y) :- parent(x,y), female(x). X,Y parent(x,y) female(x) mother(x,y) Υπόθεση κλειστού κόσμου 13 Συντακτικό Σταθερές άτομα, αριθμοί Μεταβλητές είναι τοπικές για κάθε πρόταση δεν έχουν τύπο δυο καταστάσεις : δεσμευμένες και ελεύθερες μπορούν να δεσμευτούν μόνο μια φορά Κατηγορήματα 14 7
Τελεστές Οι τελεστές είναι κατηγορήματα (τάξης 1 ή 2) που μπορούν να συνταχθούν διαφορετικά +(3,7) = 3 + 7 not(x) = not X Ο χρήστης μπορεί να ορίσει και δικούς του τελεστές related(x,y) = X related Y αν έχουμε ορίσει το related να είναι και διαδικός τελεστής 15 Λίστες Τρείς μορφές δήλωσης και χρήσης : [] [] nil.(a,[]) [a] a.nil.(a,b) [a b] a.b.(a,.(b,[])) [a,b] a.b.nil Συνήθως χρησιμοποιούνται έχοντας το [] ως τελευταίο στοιχείο 16 8
Χρήση λιστών length([],0). length([h T],N):- length(t, M), N is M + 1. member(x,[x Tail]). member(x,[h T]):- member(x,t). append([],l,l). append([h T],L,[H P]):- append(t,l,p). 17 Αριθμητική στην Prolog Σωστές εκφράσεις Χ is 3 με θ={χ = 3} X is 5 + 7 με θ={χ = 12} 7 =:= 2 + 5 8 + 2 =:= 3 + 7 Όμως Χ = 2 + 3 με θ={χ = +(2,3)} Λανθασμένες εκφράσεις 5 is X 7 =:= X + 8 18 9
Κατηγορήματα ελέγχου ροής -! Το κατηγόρημα! (cut) διαγραφή σημείων οπισθοδρόμησης δομή if then else A:- B,!, C A:- D. οριστική αποτυχία κατηγορήματος Μπορεί να επιταχύνει την εκτέλεση ή να μεταβάλει το νόημα του προγράμματος 19 Παραδείγματα χρήσης του! f(x,0):- X < 3. f(x,0):- X < 3,!. f(x,2):- 3=<X, X<6. f(x,2):- X<6,!. f(x,4):- 6=<X. f(x,4). not(p):- P,!, fail ; true. «υπόθεση κλειστού κόσμου» class(x,good):- beat(x,_), beat(_,x),!. class(x,perfect):- beat(x,_),!. class(x,poor):- beat(_,x). 20 10
Κατηγορήματα ελέγχου ροής - repeat Προσφέρει άπειρα σημεία οπισθοδρόμησης Ορίζεται ως : repeat. repeat:- repeat. Χρήσιμο στην δημιουργία βρόχων - με την βοήθεια κατηγορημάτων που αποτυχαίνουν (π.χ. fail). Η έξοδος από το βρόχο μπορεί να γίνει και με το κατηγόρημα!. 21 Παράδειγμα χρήσης του repeat writesquares:- repeat, read(x), ( integer(x), Y is X*X, write(y) ; true ) X = stop. 22 11
Έυρεση και χρήση όλων των λύσεων findall(+var, +Goal, -Bag)?- findall(x,child(οιδίπους,x),res). Res=[ιοκάστη,λάιος] bagof(+var, +Goal, -Bag), setof(+var, +Goal, -Set) forall(+cond, +Action).?- forall(member(result = Formula,[2 = 1 + 1, 4 = 2 * 2 ]), Result =:= Formula). YES 23 Βασικά ενσωματωμένα κατηγορήματα halt consult(+filename) listing listing(+predicate) true false help appropos(+word) X = Y X is Y X ; Y X == Y not(+x) \+(X) atom(+x) var(+x) integer(+x) 24 12