Στο προηγούμενο μάθημα έγινε μια εισαγωγή στην γενική μορφή ενός προγράμματος Αυτή η μορφή ακολουθεί την λογική της απόδειξης θεωρημάτων μέσω προτάσεων Προτάσεις Horn A ← A 0,A 1,…,A n : Για να αποδείξουμε ότι ισχύει το Α πρέπει να αποδείξουμε το Α 0 και το Α 1,…,και το Α ν
Υπάρχουν δύο είδη προτάσεων σε ένα πρόγραμμα Prolog, τα γεγονότα και οι κανόνες. Τα γεγονότα (= κάτι που ισχύει πάντα) εκφράζουν σχέσεις ανάμεσα στα αντικείμενα και αποτελούν κατά ένα τρόπο τα δεδομένα του προβλήματος, Η γενική μορφή ενός γεγονότος είναι η ακόλουθη όνομα_γεγονότος(δεδομένο1, δεδομένο2, …, δεδομένοn). έτσι για παράδειγμα το γεγονός father(george, mary). Μπορεί να διαβαστεί ως: ο george είναι πατέρας της mary Προσοχή: ΚΆΘΕ ΓΕΓΟΝΌΣ ΠΡΕΠΕΙ ΥΠΟΧΡΕΩΤΙΚΑ ΝΑ ΚΛΕΙΝΕΙ ΜΕ ΤΕΛΕΊΑ
Οι κανόνες εκφράζουν γενικότερες σχέσεις ανάμεσα στα αντικείμενα οι οποίες ορίζονται με τη βοήθεια άλλων σχέσεων και έχουν την μορφή προτάσεων Horn Κανόνας(μεταβλητή 1, …, μεταβλητή n ) :- σχέση 1 (μεταβλητή 1, …, μεταβλητή m ), …, σχέσηκ(μεταβλητή 1, …, μεταβλητή h ). Για παράδειγμα ένας κανόνας μπορεί να είναι parent(X,Y):- father(X,Y). parent(X,Y):- mother(X,Y). Τα X, Y είναι μεταβλητές. Το σύμβολο :- εκφράζει το λογικό «ΑΝ» Σημαντικό: Κάθε γεγονός και κανόνας τερματίζεται ΠΑΝΤΑ με μια τελεία η οποία εκφράζει το λογικό «Ή» Έτσι το παράδειγμα μπορεί να διαβαστεί σαν: ο Χ είναι γονιός του Υ αν ο Χ είναι πατέρας του Υ (πρώτος κανόνας) ή ο Χ είναι γονιός του Υ αν ο Χ είναι μητέρα του Υ (δεύτερος κανόνας)
Το αριστερό μέλος κάθε κανόνα ονομάζεται head ενώ το δεξί ονομάζεται body parent(X,Y):- father(X,Y). Το αριστερό μέλος θεωρείται ως το συμπέρασμα ενός κανόνα Το δεξί μέλος θεωρείται ως τα γεγονότα Έτσι η σημασιολογία ενός κανόνα είναι η εξής: το συμπέρασμα ισχύει αν ισχύουν τα γεγονότα head body if
Ο χρήστης αλληλεπιδρά με ένα σύστημα Prolog, δίνοντας ερωτήσεις (queries) στο διερμηνέα Σε αυτές τις ερωτήσεις το σύστημα προσπαθεί να απαντήσει με βάση τα γεγονότα και τους κανόνες που περιλαμβάνονται στο πρόγραμμα. Οι απαντήσεις που επιστρέφονται είναι είτε › yes/no › Αν η ερώτηση περιέχει μεταβλητές, κατάλληλες τιμές για τις μεταβλητές αυτές.
Ένα πρόγραμμα σε Prolog μπορεί νοητικά να χωριστεί σε 2 μέρη: › Το πρώτο μέρος αποτελείται από τα γεγονότα (είναι δηλαδή ένα είδος βάσης δεδομένων) › Το δεύτερο μέρος αποτελείται από τους κανόνες ΓΕΓΟΝΌΤΑ ΚΑΝΟΝΕΣ Programma.pl
father(george,mary). father(george,nick). father(peter,marina). mother(helen,mary). mother(helen,nick). mother(ann,marina). parent(X,Y):- father(X,Y). parent(X,Y):- mother(X,Y). Γεγονότα Κανόνες Τι σημαίνει το πρόγραμμα μας; Γεγονότα: father(george, mary) ο george είναι πατέρας της mary father(george, nick) ο george είναι πατέρας του nick κ.ο.κ. Κανόνες: parent(X,Y) :- father(X,Y) o X είναι γονιός του Υ αν ο Χ είναι πατέρας του Υ Ή (τελεία του πρώτου κανόνα) parent(X,Y) :- mother(X,Y) o X είναι γονιός του Υ αν ο Χ είναι μητέρα του Υ
Θεωρούμε ότι οι παραπάνω προτάσεις είναι αποθηκευμένες σε ένα απλό αρχείο κειμένου και ότι «φορτώθηκαν» σε κάποιο διερμηνευτή της Prolog. Πιθανές ερωτήσεις - απαντήσεις που μπορούν να γίνουν με βάση το παραπάνω πρόγραμμα είναι: ?- father(george,mary). - yes ?- father(george,marina). - no ?- father(peter,X). - X=marina Σημαίνει ότι ο κανόνας με τις συγκεκριμένες τιμές ισχύει βάση των δεδομένων Δεν σημαίνει ότι ο κανόνας είναι ψευδής αλλά ότι δεν μπορεί να αποδειχθεί για τις συγκεκριμένες τιμές Βρίσκει βάση των δεδομένων την τιμή που μπορεί να πάρει η μεταβλητή Χ
Τι απαντήσεις πρέπει να δίνονται στα παρακάτω ερωτήματα; ?- mother(X,marina). - X=ann ?- parent(george,X). - X=mary; - X=nick ?- parent(paul,X). - no ?- mother(X,Y). - X=helen, Y=mary; X=helen, Y=nick; X=ann, Y=marina; no Υπάρχει άλλη απάντηση; Εδώ το no σημαίνει ότι δεν υπάρχει άλλη απάντηση