Επόμενη: Ανάγνωση Λογικών Προγραμμάτων
Πάνω Επίπεδο: Λογικός Προγραμματισμός
Προηγούμενη: Λογικός Προγραμματισμός
Η σύνταξη των λογικών προγραμμάτων ακολουθεί τη σύνταξη της κατηγορηματικής λογικής πρώτης τάξης.
- Στα λογικά προγράμματα, το σύμβολο της συνεπαγωγής ``'' μιας πρότασης Horn γράφεται ``'', ένα
αρνητικό λεκτικό στοιχείο στο σώμα μιας πρότασης θα γράφεται ``not A'', ενώ τα σύμβολα
(ή), (και) είναι τα ``;'', ``,'' αντίστοιχα.
- Μια πρόταση έχει τη μορφή , όπου . Το A ονομάζεται κεφαλή
(head) της πρότασης και το τμήμα σώμα (body). Αν η
πρόταση ονομάζεται κανόνας (rule), ενώ αν ονομάζεται γεγονός (fact) (ή
μοναδιαία πρόταση -unit clause) και γράφεται, απλά, A. 'Ενας στόχος (η ερώτημα - query) σ' ένα
λογικό πρόγραμμα, εκφράζεται από το σύμβολο ``?-'' ακολουθούμενο από μια σύζευξη λεκτικών στοιχείων. Κάθε πρόταση ή
στόχος τερματίζεται από μια τελεία ``.''.
- Τα ονόματα των κατηγορημάτων είναι ακολουθίες συμβόλων (strings) και αρχίζουν με πεζό γράμμα του λατινικού
αλφαβήτου.
- Μια συλλογή προτάσεων που έχουν το ίδιο όνομα κατηγορήματος για κεφαλή ορίζει μια σχέση (relation) και ονομάζεται
διαδικασία (procedure).
- Η βασική δομή στα λογικά προγράμματα είναι ο όρος (term). 'Ενας όρος μπορεί να είναι μια σταθερά (ακέραιος
αριθμός ή άτομο), μια μεταβλητή ή ένας σύνθετος όρος. Τα άτομα τα συμβολίζουμε με ακολουθίες χαρακτήρων που αρχίζουν με
πεζά γράμματα του λατινικού αλφαβήτου ή με ακολουθίες οιονδήποτε άλλων συμβόλων περικλειόμενες από απλά εισαγωγικά.
- 'Ενας σύνθετος όρος (compound term) είναι μια δομή η οποία συγκροτείται από ένα σύμβολο συνάρτησης
(που ονομάζεται και συναρτησιακός τελεστής -functor) και μια ακολουθία ενός η περισσότερων όρων
που ονομάζονται ορίσματα (arguments). 'Ενας σύνθετος όρος χαρακτηρίζεται από το όνομά του, το οποίο είναι
ένα άτομο, και από τον αριθμό των ορισμάτων του που ονομάζεται τάξη (arity). 'Ενας συναρτησιακός τελεστής
τάξης k θα συμβολίζεται f/k. 'Ενας όρος που δεν περιλαμβάνει καμία μεταβλητή θα ονομάζεται βασικός
(ground).
- Τα ονόματα των μεταβλητών αρχίζουν με κεφαλαίο γράμμα ή από το σύμβολο ``_''. Μεταβλητές που εμφανίζονται μόνο
μία φορά σε μια πρόταση δεν χρειάζεται να ονομάζονται. Τέτοιες μεταβλητές ονομάζονται ανώνυμες (anonymous)
και συμβολίζονται με το σύμβολο ``_''. Διακεκριμένες εμφανίσεις ανώνυμων μεταβλητών σε μια πρόταση θεωρούνται
διαφορετικές μεταξύ τους.
Ας δούμε, για παράδειγμα, ένα λογικό πρόγραμμα που αναπαριστά οικογενειακές σχέσεις:
Το κατηγόρημα father/2
δηλώνει ότι ο X
είναι πατέρας του Y
. Μια παρόμοια σχέση ορίζεται από το
κατηγόρημα mother/2
. Και τα δύο αυτά κατηγορήματα ορίζονται από σύνολα γεγονότων. Από την άλλη μεριά, το κατηγόρημα
parent/2
ορίζεται από δύο κανόνες και μας λέει ότι ο X
είναι γονιός του Y
, ή αν ο X
είναι
πατέρας του Y
, ή αν η X
είναι μητέρα του Y
. Η απάντηση της ερώτησης (ή στόχου)
?- parent(Who, danae)
είναι το σύνολο των αντικαταστάσεων {Who/john, Who/chrysa}
.
Οι προηγούμενοι κανόνες ορίζουν νέες σχέσεις με τη βοήθεια άλλων. Ωστόσο, η πολύ γνωστή έννοια της αναδρομής (recursion),
μπορεί να χρησιμοποιηθεί στον ορισμό κανόνων, για να ορίσει σχέσεις με τη βοήθεια των εαυτών τους. Οι αναδρομικοί κανόνες αυξάνουν
σημαντικά την εκφραστική δύναμη του λογικού προγραμματισμού. Για παράδειγμα, αν θέλουμε να ορίσουμε τη σχέση ancestor/2
(πρόγονος) με χρήση της σχέσης parent/2
, το πιθανότερο είναι να χρειαστεί να γράψουμε ένα άπειρο σύνολο κανόνων της μορφής
κ.λ.π.
Με χρήση, όμως, αναδρομικού ορισμού, γράφουμε
Εργαστήριο Γλωσσών Προγραμματισμού και Τεχνολογίας Λογισμικού
Mon Apr 5 16:25:43 EEST 1999