Κεφάλαιο 7. Λογικός Προγραμματισμός: Η Γλώσσα Prolog. Προπτυχιακό μάθημα Αρχές Γλωσσών Προγραμματισμού Π. Ροντογιάννης

Σχετικά έγγραφα
Λογικός Προγραµµατισµός: Η Γλώσσα Prolog

ΧΑΡΟΚΟΠΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΜΑΤΙΚΗΣ

επιµέλεια Θοδωρής Πιερράτος

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Αριθμητική Ανάλυση & Εφαρμογές

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας

Ρητή μετατροπή αριθμητικής τιμής σε άλλο τύπο. Τι θα τυπωθεί στον παρακάτω κώδικα;

K15 Ψηφιακή Λογική Σχεδίαση 7-8: Ανάλυση και σύνθεση συνδυαστικών λογικών κυκλωμάτων

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

ΑΛΓΟΡΙΘΜΟΙ ΜΕ C. ΝΙΚΟΛΑΟΣ ΣΑΜΑΡΑΣ Αναπληρωτής Καθηγητής. CMOR Lab. Computational Methodologies and Operations Research

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

Διδάσκων: Παναγιώτης Ανδρέου

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΠΑΝΕΛΛΑΔΙΚΩΝ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

ΒΑΣΙΚΕΣ ΑΡΧΕΣ ΨΗΦΙΑΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ. Κεφάλαιο 3

(α) Ζητείται να αναπαρασταθεί η παραπάνω γνώση σε Prolog, ώστε να δημιουργηθεί αντίστοιχο πρόγραμμα.

Ισότητα, Αλγεβρικές και Αναλυτικές Ιδιότητες Πραγματικών Ακολουθιών

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΜΑΪΟΥ

turnin Lab4.pro

Διαδικασιακός Προγραμματισμός

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)


Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1

ΤΡΙΩΡΗ ΓΡΑΠΤΗ ΔΟΚΙΜΑΣΙΑ

A. Να γράψετε τον αριθμό της κάθε μιας από τις παρακάτω προτάσεις και δίπλα. το γράμμα Σ, εάν είναι σωστή, ή το γράμμα Λ, εάν είναι λανθασμένη.

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ ΓΛΩΣΣΟΜΑΘΕΙΑ

1 Αριθμητική κινητής υποδιαστολής και σφάλματα στρογγύλευσης

Αλγόριθμοι Αναπαράσταση αλγορίθμων Η αναπαράσταση των αλγορίθμων μπορεί να πραγματοποιηθεί με:

Περιεχόμενα Πρόλογος 1. Εισαγωγή 2. Τα Βασικά Μέρη ενός Προγράμματος Prolog

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

Τεχνητή Νοημοσύνη. 2η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

Λογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η

Περιεχόμενα Ορισμός και λειτουργία των μηχανών Turing Θεωρία Υπολογισμού Ενότητα 20: Μηχανές Turing: Σύνθεση και Υπολογισμοί Επ. Καθ. Π. Κατσαρός Τμήμ

ΕΠΛ 434: Λογικός Προγραμματισμός

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

ΓΛΩΣΣΑ ΑΛΦΑΒΗΤΟ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΣΤΑΘΕΡΕΣ ΜΕΤΑΒΛΗΤΕΣ

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ

Εισαγωγικά στοιχεία αλγορίθμων -Δομή Ακολουθίας Δομή Επιλογής ΗΜΕΡΟΜΗΝΙΑ 10/ 07/ 2017 ΟΝΟΜΑΤ/ΜΟ ΒΑΘΜΟΣ

Κεφάλαιο 3 Η Σημασιολογία των Γλωσσών Προγραμματισμού

Ανάπτυξη και Σχεδίαση Λογισμικού

Προγραμματισμός Ι (HY120)

Γ' ΛΥΚΕΙΟΥ ΤΕΧΝΟΛΟΓΙΚΗ ΚΑΤΕΥΘΥΝΣΗ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΚΦΩΝΗΣΕΙΣ ÏÅÖÅ

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 2 Εντολές Εισόδου/Εξόδου Τελεστές. Δρ. Γιώργος Λαμπρινίδης 23/10/2015 Η - Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ ΘΕΜΑ Α

ΜΕΡΙΚΑ ΣΤΟΙΧΕΙΑ ΓΙΑ ΤΙΣ ΓΛΩΣΣEΣ ΠPOΓPAMMATIΣMOY

1. Δεν μπορεί να γίνει κλήση μίας διαδικασίας μέσα από μία συνάρτηση.

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

ιαφάνειες παρουσίασης #11

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη.

ΠΡΟΣΟΜΟΙΩΣΗ ΠΑΝΕΛΛΑΔΙΚΩΝ ΕΞΕΤΑΣΕΩΝ Γʹ ΤΑΞΗΣ ΗΜΕΡΗΣΙΟΥ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΑΕΠΠ ΤΡΙΤΗ 18 ΑΠΡΙΛΙΟΥ 2017 ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΠΤΑ (7)

ΑΕΠΠ Ερωτήσεις θεωρίας

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ (ΚΥΚΛΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΗΡΕΣΙΩΝ)

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

Ασκήσεις Φροντιστηρίου «Υπολογιστική Νοημοσύνη Ι» 5 o Φροντιστήριο

Προγραμματισμός Ι (ΗΥ120)

Δένδρα. Μαθηματικά (συνδυαστικά) αντικείμενα. Έχουν κεντρικό ρόλο στην επιστήμη των υπολογιστών :

3 ο Εργαστήριο Μεταβλητές, Τελεστές

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον. Εκχώρηση Τιμών

Σχεσιακή Άλγεβρα και Σχεσιακός Λογισμός. Σχεσιακή Άλγεβρα Σχεσιακός Λογισμός

Προγραμματισμός ΙI (Θ)

Ευφυής Προγραμματισμός

ΟΜΟΣΠΟΝΔΙΑ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑΔΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2019 Β ΦΑΣΗ Γ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

Πιο συγκεκριμένα, η χρήση του MATLAB προσφέρει τα ακόλουθα πλεονεκτήματα.

ΘΕΜΑ Α. Α2. Να αναφέρετε από τι εξαρτάται η επιλογή του καλύτερου αλγορίθμου ταξινόμησης. Μονάδες 4. Σελίδα 1 από 8

Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά.

Προγραμματισμός ΙI (Θ)

ΤΕΛΟΣ 1ΗΣ ΑΠΟ 5 ΣΕΛΙ ΕΣ

Πρόβλημα 29 / σελίδα 28

Γ τάξη Τεχνολογικής Κατεύθυνσης Ενιαίου Λυκείου ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. ΔΟΜΗ ΕΠΙΛΟΓΗΣ Διδάσκων: ΔΟΥΡΒΑΣ ΙΩΑΝΝΗΣ

ΠΕΡΙΕΧΟΜΕΝΑ. Εντολές επιλογής Εντολές επανάληψης

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ. Α2. Να αναφέρετε ονομαστικά: i) τα αλγοριθμικά κριτήρια ii) τους τρόπους αναπαράστασης αλγορίθμου. (μονάδες 10)

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ

Κατ οίκον Εργασία 3 Σκελετοί Λύσεων

Αριθμητική Ανάλυση και Εφαρμογές

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ

Κεφάλαιο 2. Συστήματα Αρίθμησης και Αναπαράσταση Πληροφορίας. Περιεχόμενα. 2.1 Αριθμητικά Συστήματα. Εισαγωγή

PROLOG Εισαγωγή (PROgramming in LOGic)

Επιλογή και επανάληψη. Λογική έκφραση ή συνθήκη

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος


Εισαγωγή στον Προγραμματισμό

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

18/ 07/ Σελίδα 1 6

Μαθηματικά Α' Γυμ. - Ερωτήσεις Θεωρίας 1 ΕΡΩΤΗΣΕΙΣ. (1) Ποιοι είναι οι φυσικοί αριθμοί; Γράψε τέσσερα παραδείγματα.

Σημαντικές δυνατότητες των σύγχρονων υπολογιστικών μηχανών: Αξιόπιστη καταγραφή πολύ μεγάλου όγκου δεδομένων

ΕΡΩΤΗΣΕΙΣ ΔΙΑΦΟΡΩΝ ΤΥΠΩΝ ΣΤΟ ΚΕΦΑΛΑΙΟ 2.2

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ

Ανακτήθηκε από την ΕΚΠΑΙΔΕΥΤΙΚΗ ΚΛΙΜΑΚΑ edu.klimaka.gr ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ

Transcript:

Κεφάλαιο 7 Λογικός Προγραμματισμός: Η Γλώσσα Prolog Προπτυχιακό μάθημα Αρχές Γλωσσών Προγραμματισμού Π. Ροντογιάννης 1

Βασικά Στοιχεία Γλώσσας Prolog Ορισμοί (statements): Επιτελούν το ρόλο εντολών στις κλασσικές γλώσσες προγραμματισμού Γεγονότα Κανόνες Ερωτήσεις Όροι (terms): Μοναδική δομή δεδομένων Prolog 2

Γεγονός Είναι το απλούστερο είδος ορισμού, που υποστηρίζει η Prolog Παρέχει τρόπο έκφρασης της σχέσης, που ισχύει ανάμεσα σε οντότητες 3

Παράδειγμα Γεγονότος Το γεγονός father (john, mary). Εκφράζει ότι ο john είναι πατέρας της mary ή ότι η σχέση father ισχύει ανάμεσα στα άτομα john και mary. 4

Ορισμοί Σχέσεις όπως το father ονομάζονται κατηγορήματα Οι οντότητες mary και john ονομάζονται ορίσματα του κατηγορήματος Ένα κατηγόρημα μαζί με τα ορίσματα, που περιλαμβάνει ονομάζεται ατομικός τύπος 5

Σχέση Plus Ορίζεται από σύνολο γεγονότων plus(0,0,0). plus(0,1,1). plus(1,0,1). plus(2,0,2). plus(0,2,2). 6

Σχέση Plus Ορίζει την πρόσθεση φυσικών αριθμών Δεν μπορεί να οριστεί αποκλειστικά με τη χρήση γεγονότων Απαιτείται άπειρος αριθμός γεγονότων, (όπως παραπάνω) 7

Μεταβλητές Η Prolog επιτρέπει τη χρήση μεταβλητών σε Γεγονότα, κανόνες και ερωτήσεις Οι μεταβλητές αρχίζουν πάντα με κεφαλαίο γράμμα Παράδειγμα: plus(0,x,x). Εκφράζει την ιδιότητα του ουδέτερου στοιχείου της πρόσθεσης. Η χρήση μεταβλητών επιτρέπει την έκφραση συνόλου γεγονότων 8

Ερωτήσεις Παρέχουν τη δυνατότητα εξαγωγής πληροφορίας από ένα λογικό πρόγραμμα Διερευνούν την ισχύ μιας σχέσης ανάμεσα σε ορισμένες οντότητες 9

Παράδειγμα Ερώτηση:?-father(john, mary). Διερευνά αν η σχέση father ισχύει ανάμεσα στα άτομα john και mary. 10

Παράδειγμα Αν έχει δοθεί στην Prolog το γεγονός: father(john, mary). Τότε η απάντηση στην παραπάνω ερώτηση θα είναι yes. 11

Μεταβλητές και Ερωτήσεις - 1 Ερώτηση:?-father(X,mary). Διαβάζεται ως: «Υπάρχει κάποιο πρόσωπο Χ το οποίο είναι πατέρας της mary;» 12

Μεταβλητές και Ερωτήσεις - 2 Μία ερώτηση μπορεί να επιστρέψει περισσότερες από μία απαντήσεις. Παράδειγμα:Αν έχουμε δώσει στην Prolog δύο γεγονότα father(john, mary). father(john, ann). Τότε η ερώτηση:?-father(john, X). Θα επιστρέψει δύο λύσεις X=mary και X=ann 13

Σύνθετες Ερωτήσεις Ερώτηση:?-father(X,mary), father(x,ann) Αναζητά το πρόσωπο που είναι πατέρας της mary και της ann. Η σύνθετη ερώτηση αποτελείται από υποερωτήσεις (κλήσεις). Οι κλήσεις σε μία σύνθετη ερώτηση χωρίζονται μεταξύ τους με κόμμα, που έχει την έννοια λογικού «και». Για να αληθεύει μία σύνθετη ερώτηση πρέπει να αληθεύουν όλες οι απλούστερες ερωτήσεις, που την αποτελούν. 14

Κανόνες Επιτρέπουν τον ορισμό νέων σχέσεων ως συνάρτηση άλλων σχέσεων. Παράδειγμα: son(x,y):-father(y,x), male(x). Ορίζει τη σχέση son ως συνάρτηση των σχέσεων father και male. Διαβάζεται ως: «Ο Χ είναι γιός του Υ αν ο Υ είναι πατέρας του Χ και ο Χ είναι γένους αρσενικού». Το σύμβολο «:-» διαβάζεται σαν «εάν», ενώ το «,» ως «και». 15

Αναδρομικοί Κανόνες ancestor(x,y):-parent(x,y). ancestor(x,y):-parent(x,z), ancestror(z,y). Η σχέση ancestor (πρόγονος) μπορεί να ορισθεί με χρήση δύο κανόνων, εκ των οποίων ο ένας είναι αναδρομικός. Γενικά, ένας κανόνας έχει τη μορφή Η:-Β 1,,Β n, όπου το Η λέγεται κεφαλή του κανόνα και οι ατομικοί τύποι Β 1,,Β n, αποτελούν το σώμα του κανόνα. 16

Όροι Βασική δομή στον λογικό προγραμματισμό Σταθερά (όπως john), μεταβλητή (όπως Χ) ή σύνθετος όρος Ο σύνθετος όρος αποτελείται από ένα συναρτησιακό σύμβολο (functional symbol), που εφαρμόζεται σε ακολουθία από όρους. Παράδειγμα: list(a,nil) όπου list το συναρτησιακό σύμβολο και a,nil σταθερές 17

Όροι Χρήση για κωδικοποίηση σύνθετων μορφών πληροφορίας Παράδειγμα: Ορισμός κατηγορήματος book, που λαμβάνει σαν παραμέτρους όρους για περιγραφή των χαρακτηριστικών της έννοιας βιβλίο. Με τον τρόπο αυτό δημιουργείται μία απλή βάση δεδομένων: book(author(surname(stoll), name(robert)), subject(logic)). book(author(surname(kleene), name(steven)), subject(mathematics)). 18

Όροι Διαφορά ανάμεσα στο book (όνομα κατηγορήματος) και στα author, surname, name, subject (συναρτησιακά σύμβολα) 19

Παράδειγμα Αναζήτηση ονοματεπωνύμων, που έχουν γράψει βιβλία σε λογική Ερώτηση:?-book(author(surname(X), name(y), subject(logic)). Αν δεν ενδιαφέρουν τα μικρά ονομάτων συγγραφέων, η ερώτηση μπορεί να τεθεί:?-book(author(surname(x), _), subject(logic)). Όπου με «_» συμβολίζονται οι όροι των οποίων η τιμή δεν μας ενδιαφέρει. 20

Όροι Γραφή προγραμμάτων όχι μόνο με χρήση κανόνων και γεγονότων Παράδειγμα: Ορισμός της σχέσης nat(x), η οποία αληθεύει όταν Χ φυσικός αριθμός. Ένας τρόπος είναι να συμφωνηθεί η αναπαράσταση των φυσικών αριθμών αντί για 0,1,2, με 0,s(0), s(s(0)), Το συναρτησιακό σύμβολο s εκφράζει την έννοια του «επόμενου αριθμού». 21

Παράδειγμα Το πρόγραμμα για το nat γράφεται: nat(0). nat(s(x)):-nat(x). Παρόμοια ορίζονται και άλλες σχέσεις πάνω σε φυσικούς αριθμούς. 22

Παράδειγμα Το plus(x,y,z) είναι αληθές αν το Ζ είναι το άθροισμα των Χ και Υ. plus (0,X,X). plus(s(x),y,s(z)):-plus(x,y,z). Θέτοντας την ερώτηση:?-plus(s(0), s(0),k). Παίρνουμε την απάντηση Κ = s(s(0)). 23

Ορίσματα Στην Prolog δεν γίνεται καθορισμός ποια από τα ορίσματα ενός κατηγορήματος είναι είσοδοι και ποια έξοδοι. Πολλά προγράμματα έχουν διαφορετικές χρήσεις Παράδειγμα: Αν τεθεί η ερώτηση:?-plus(x,s(0), s(s(s(0)))). Δίνεται η απάντηση Χ=s(s(0)), που αντιστοιχεί στον αριθμό, που λαμβάνεται αν αφαιρέσουμε από το τρίτο όρισμα το δεύτερο. 24

Εκτέλεση Προγραμμάτων Prolog Έστω το πρόγραμμα grandparent(x,y):-parent(x,z), parent(z,y). parent(tom,jim). parent(jim,george). Όταν τεθεί η ερώτηση:?-grandparent(a,b). ο μηχανισμός εκτέλεσης της Prolog εκτελεί αναζήτηση λύσεων της μορφής του δέντρου, που ακολουθεί. 25

Δέντρο εκτέλεσης της ερώτησης?-grandparent(a,b)?-grandparent(a,b) parent(a,z), parent(z,b) {A=tom, Z=jim} {A=jim, Z=george} parent(jim,b) parent(george,b) fail 26

Εκτέλεση Προγραμμάτων Prolog Αρχικά ο μηχανισμός της Prolog αναζητά στο πρόγραμμα κατηγόρημα με το όνομα grandparent ώστε να ταιριάζει με τη δεδομένη ερώτηση. Μόλις βρεθεί πρόταση, που αφορά αυτό το κατηγόρημα, αντικαθιστά την δεδομένη ερώτηση με το σώμα της πρότασης και δημιουργείται νέα (σύνθετη) ερώτηση parent(a,z), parent(z,b). 27

Μηχανισμός Εκτέλεσης Prolog Έστω ότι έχουμε ένα πρόγραμμα και μία ερώτηση της μορφής?-α 1,, Α n. Τότε: Η Prolog εξετάζει εάν ικανοποιούνται όλοι οι στόχοι Α 1,, Α n ξεκινώντας από το Α 1 και πηγαίνοντας προς το Α n. Για να ικανοποιήσει ένα από τα Α i, η Prolog διαλέγει την πρώτη πρόταση στο πρόγραμμα της οποίας η κεφαλή ταιριάζει με το Α i, και αντικαθιστά το Α i με το σώμα της πρότασης αυτής (αφού πρώτα το τροποποιήσει κατάλληλα). Η διαδικασία συνεχίζεται μέχρι να μην υπάρχει πλέον άλλη κλήση, που να πρέπει να ικανοποιηθεί. 28

Απλά Αναδρομικά Προγράμματα σε Prolog Με τη χρήση όρων γράφονται απλά και εκφραστικά προγράμματα, όπως το plus (0,X,X). plus(s(x),y,s(z)):-plus(x,y,z). Όμοια ορίζεται για τον πολλαπλασιασμό φυσικών αριθμών times (0,X,0). Πρόσθεση φυσικών αριθμών times(s(x),y,z):-times(x,y,w), plus(w,y,z). 29

Σχόλια Η παραπάνω σχέση χρησιμοποιεί δύο βασικά αξιώματα του πολλαπλασιασμού, το 0*Χ=0 και το (Χ+1)*Υ=Χ*Υ+Υ. Ο ορισμός του πολλαπλασιασμού χρησιμοποιεί αυτόν της πρόσθεσης 30

Μαθηματικές Σχέσεις Φυσικών Αριθμών Με χρήση του ορισμού του πολλαπλασιασμού δίνεται η σχέση για το παραγοντικό ενός φυσικού αριθμού factorial(0,s(0)). factorial(s(n),f):-factorial(n,f1),times(s(n),f1,f). 31

Μαθηματικές Σχέσεις Φυσικών Αριθμών Σχέση between(x,y,z): αληθεύει όταν Χ είναι ένας φυσικός αριθμός μικρότερος ή ίσος από τον Υ και ο Υ είναι μικρότερος ή ίσος από τον Ζ. between(0,0,z). between(0,s(y),s(z)):-between(0,y,z). between(s(x),s(y),s(z)):-between(x,y,z). 32

Σχόλια Οι φυσικοί αριθμοί αναπαρίστανται με πολύ πιο βολικό τρόπο στην Prolog (όπως και στις υπόλοιπες γλώσσες προγραμματισμού). Η αναπαράσταση, που χρησιμοποιήθηκε στα παραπάνω προγράμματα δεν είναι γενικά βολική και αποτελεσματική. Υιοθετήθηκε για να δειχθούν οι αρχικές δυνατότητες της Prolog. 33

Αναδρομικός Προγραμματισμός με Λίστες Λίστα Πολύ χρήσιμη δομή δεδομένων για προγραμματισμό σε Prolog Κενή - συμβολίζεται με [ ] Περιέχει στοιχεία, πχ η [a,b,c] είναι μη κενή λίστα Το πρώτο στοιχείο λίστας ονομάζεται κεφαλή (head) Η λίστα που προκύπτει αν αφαιρέσουμε την κεφαλή, ονομάζεται ουρά (tail) Ο τελεστής αποτελεί ειδική αναπαράσταση, που δείχνει άμεσα την κεφαλή και την ουρά μιας λίστας. Η λίστα [a,b,c] γράφεται ως [a [b,c]] και η [a] ως [a [ ]]. 34

Παράδειγμα 7.1 Οι λίστες Prolog μπορούν να περιέχουν σα στοιχεία τους και άλλες λίστες, αλλά και πολύπλοκους όρους, όπως [[ ]] επιτρεπτή λίστα [[1,Χ], s(s(x))] Οι [a [1 [2]]] και [Χ,Υ [a]] είναι ισοδύναμες με τις λίστες [a,1,2] και [X,Y,a] αντίστοιχα. 35

Παράδειγμα 7.2 Η σχέση member (X,Y) είναι αληθής, όταν το Χ είναι στοιχείο της λίστας Υ. member(x,[x Y]). member(x,[y Z]):-member(X,Z). Το νόημα του προγράμματος είναι: «Το Χ είναι μέλος μιας λίστας αν είναι η κεφαλή της λίστας ή αν είναι μέλος της ουράς της λίστας». 36

Παράδειγμα 7.3 Η σχέση append(x,y,z) είναι αληθής, όταν το Z είναι η λίστα, που προκύπτει από την συνένωση των λιστών Χ και Υ. append([],y,y). append([x Xs],Ys,[X Zs]):-append(Xs,Ys,Zs). Η δομή του παραπάνω προγράμματος είναι παρόμοια με αυτή του προγράμματος για τον ορισμό της σχέσης plus. 37

Παράδειγμα 7.4 Συχνά στον προγραμματισμό σε Prolog χρησιμοποιούνται απλές σχέσεις, ήδη ορισμένες για να γραφούν πιο πολύπλοκα προγράμματα. Σχέσεις όπως η member και η append χρησιμοποιούνται σχεδόν σε οποιοδήποτε μεγάλο πρόγραμμα γραφτεί σε Prolog. 38

Παράδειγμα 7.4 Σχέση reverse(x,y) ορίζεται σα συνάρτηση της append. Είναι αληθής, όταν η λίστα Υ είναι η αντίστροφη της λίστας Χ: reverse([],[]). reverse([x Xs],Ys):-reverse(Xs,Rs), append(rs, [X], Ys). Το νόημα του παραπάνω προγράμματος είναι: «Η αντίστροφη της κενής λίστας είναι η κενή λίστα. Η αντίστροφη μη-κενής λίστας μπορεί να παραχθεί αντιστρέφοντας την ουρά της και προσκολλώντας στο τέλος της αντεστραμμένης ουράς την κεφαλή της αρχικής λίστας.» 39

Παράδειγμα 7.4 Το προηγούμενο παράδειγμα μπορεί να γραφεί και χωρίς τη χρήση της append, αλλά με προσθήκη ενός βοηθητικού κατηγορήματος του reverse1, που διαθέτει ένα επιπλέον όρισμα: reverse(xs, Ys):-reverse1(Xs,[],Ys). reverse1([],ys, Ys). reverse1([x Xs],A,Ys):-reverse1(Xs,[X A],Ys). Το όρισμα Α ονομάζεται συσσωρευτής (accumulator) διότι συσσωρεύει βήμα-βήμα το τελικό αποτέλεσμα (δηλαδή την αντίστροφη λίστα). 40

Αναδρομικός Προγραμματισμός με Δέντρα Δέντρα Πολύ χρήσιμος τύπος δεδομένων Αναπαρίστανται με χρήση όρων (μοναδική δομή δεδομένων Prolog) Χρήση του συναρτησιακού συμβόλου tree με τρεις παραμέτρους: tree(element, Left, Right) Το στοιχείο Element είναι η ρίζα του συγκεκριμένου δέντρου, το Left το αριστερό υπόδεντρο και το Right το δεξί υποδέντρο. Το κενό δέντρο αναπαρίσταται με τη σταθερά void. 41

Παράδειγμα Δέντρο με κορυφή a, αριστερό παιδί b και δεξί παιδί c γράφεται ως: tree(a, tree(b,void,void), tree(c,void, void)) 42

Παράδειγμα Πρόγραμμα για έλεγχο του αν ένας δεδομένος όρος είναι πράγματι δυαδικό δέντρο (ανάλογο του κατηγορήματος nat) binary_tree(void). binary_tree(tree(e,l,r)):-binary_tree(l),binary_tree (R). 43

Παράδειγμα Πρόγραμμα για έλεγχο του αν ένα δεδομένο στοιχείο ανήκει σε ένα δέντρο ή όχι. Το πρόγραμμα είναι ανάλογο με το member, που ορίσθηκε για τις λίστες: tree_member(x, tree(x,_,_)). tree_member(x, tree(y,l,r)):-tree_member(x,l). tree_member(x, tree(y,l,r)):-tree_member(x,r). 44

Παράδειγμα Το παραπάνω πρόγραμμα ελέγχει αν ένα δεδομένο στοιχείο είναι ταυτόσημο με την κορυφή του δεδομένου δέντρου. Αν ναι, το πρόγραμμα σταματά με επιτυχία. Αν όχι, το πρόγραμμα συνεχίζει αναδρομικά τη διερεύνηση στο αριστερό και το δεξί υποδέντρο. 45

Κατηγορήματα Ουσιαστικά «διασχίζουν» ένα δεδομένο δέντρο με μία προκαθορισμένη σειρά. Το αποτέλεσμα της διάσχισης επιστρέφεται σε μία λίστα. 46

Παράδειγμα Η preorder διάσχιση ενός δυαδικού δέντρου ορίζεται από το ακόλουθο κατηγόρημα: preorder(void,[]). preorder(tree(x,l,r), Xs):-preorder(L,Ls), preorder(r,rs), append([x Ls],Rs,Xs). Κατά την preorder διάσχιση ενός δέντρου καταγράφεται αρχικά η ρίζα του δέντρου και κατόπιν επισκεπτόμαστε αναδρομικά πρώτα το αριστερό υποδέντρο και μετά το δεξί. 47

Παράδειγμα Με ανάλογο τρόπο γράφεται πρόγραμμα, που υλοποιεί την διάσχιση inorder: inorder(void,[]). inorder(tree(x,l,r), Xs):-inorder(L,Ls), inorder(r,rs), append(ls,[x Rs],Xs). 48

Πρόγραμμα για την postorder postorder(void,[]). postorder(tree(x,l,r),xs):-postorder(l,ls), postorder(r,rs), append(ls,rs,ms), append(ms,[x],xs). Τα παραπάνω προγράμματα διαφέρουν μόνο ως προς τον τρόπο, που γίνεται η συνένωση των επιμέρους αποτελεσμάτων (append). 49

Τελεστές Συναρτησιακά σύμβολα Χρήση σε επεξεργασία πιο πολύπλοκων δομών από ότι οι λίστες και τα δέντρα Στην έκφραση 1+3, το + είναι τελεστής Ισοδύναμη έκφραση +(1,3) και όχι ο αριθμός 4, όπως συμβαίνει σε άλλες γλώσσες προγραμματισμού Η πρόσθεση θα πραγματοποιούταν αν ο όρος 1+3 ήταν όρισμα στο ειδικό κατηγόρημα is της Prolog για υπολογισμό αριθμητικών εκφράσεων 50

Τελεστές - 2 Οι τελεστές +,-,*,/,... δεν λαμβάνουν συγκεκριμένο νόημα από την Prolog Χρησιμοποιούνται για να γραφούν εφαρμογές με κομψό και συνοπτικό τρόπο Στο επόμενο παράδειγμα οι τελεστές χρησιμοποιούνται, για τη διατύπωση της διαδικασίας παραγώγισης συναρτήσεων 51

Παραγώγιση derivative(n,x,0):-nat(n). derivative(x,x,s(0)). derivative(x^s(n),x,s(n)*(x^n)). derivative(sin(x),x,cos(x)). derivative(cos(x),x,-sin(x)). derivative(e^x,x,e^x). derivative(log(x),x,1/x). derivative(f+g,x,df+dg):-derivative(f,x,df), derivative(g,x,dg). derivative(f-g,x,df-dg):-derivative(f,x,df), derivative(g,x,dg). derivative(f*g,x,f*dg+g*df):-derivative(f,x,df), derivative(g,x,dg). 52

Παραγώγιση derivative(1/f,x,-df/(f*f)):-derivative(f,x,df). derivative(f/g,x, G*DF-F*DG/(G*G)):- derivative(f,x,df), derivative(g,x,dg). Το πρόγραμμα υπολογίζει την παράγωγο μίας μεγάλης κατηγορίας συναρτήσεων. Οι τελεστές, που χρησιμοποιούνται εκφράζουν πράξεις μεταξύ συναρτήσεων. Την έκφραση F*G, ο προγραμματιστής την καταλαβαίνει σαν πολλαπλασιασμό συναρτήσεων και αυτό είναι δυνατό καθώς η Prolog δεν δίνει προκαθορισμένο νόημα σε σύμβολα, όπως το *. 53

Παραγώγιση Αν στο παραπάνω πρόγραμμα δοθεί η ερώτηση?-derivative(cos(x)*(x^s(s(0))),x,d). Η οποία αναζητά την παράγωγο της συνάρτησης cos(x)*x 2 θα λάβουμε την απάντηση D=cos(x)*(s(s(0))*x^s(0))+x^s(s(0))*(-sin(x)) Η οποία αντιστοιχεί στη συνάρτηση cos(x)*(2*x)+x 2 *(-sin(x)). 54

Αριθμητικές πράξεις και Prolog Κάθε γλώσσα προγραμματισμού παρέχει ιδιαίτερες ευκολίες στη χρήση και επεξεργασία αριθμών. Η Prolog διαθέτει Ειδικά κατηγορήματα, γνωστά ως κατηγορήματα συστήματος (system predicates) 55

Κατηγορήματα Prolog Βασικό κατηγόρημα το is, που χρησιμοποιείται στη μορφή V is E. H Prolog υπολογίζει την τιμή του Ε και αν αυτή η τιμή συμφωνεί με το V, τότε επιτυγχάνει. Αν V μεταβλητή, τότε λαμβάνει την τιμή του Ε. Όταν Ε περιέχει μεταβλητές με άγνωστη τιμή τη στιγμή της εκτέλεσης, ο διερμηνέας της Prolog δίνει μήνυμα λάθους. 56

Παράδειγμα 7.5 Η ερώτηση Ενώ η ερώτηση?-8 is 5+3 επιτυγχάνει?-5+3 is 8 αποτυγχάνει Διότι η Prolog βλέπει το αριστερό μέλος της σαν τον όρο +(5,3) και δεν υπολογίζει την τιμή του. 57

Παράδειγμα Η ερώτηση?-χ is 5+3 θα δώσει την απάντηση Χ = 8 Η ερώτηση?-χ is 2+Y θα δώσει μήνυμα λάθους, διότι η αριθμητική τιμή του δεξιού μέλους δεν μπορεί να υπολογισθεί λόγω της μεταβλητής Υ. 58

Κατηγορήματα της Prolog Για αριθμητικές πράξεις Χ = : = Υ (Οι αριθμητικές τιμές των Χ και Υ είναι ίδιες) Χ = \ = Υ (Οι αριθμητικές τιμές των Χ και Υ είναι διαφορετικές) 59

Κατηγορήματα της Prolog Χ < Υ (Η αριθμητική τιμή του Χ είναι μικρότερη από αυτή του Υ) Χ=<Υ (Η αριθμητική τιμή του Χ είναι μικρότερη ή ίση από αυτή του Υ) 60

Κατηγορήματα της Prolog Χ > Υ (Η αριθμητική τιμή του Χ είναι μεγαλύτερη από αυτή του Υ) Χ >= Υ (Η αριθμητική τιμή του Χ είναι μεγαλύτερη ή ίση από αυτή του Υ) 61

Κατηγορήματα Με χρήση των προηγούμενων κατηγορημάτων μπορούν να ξαναγραφούν κατηγορήματα, που ορίσθηκαν με χρήση των όρων (πχ 0, s(0),.) 62

Κατηγορήματα Το κατηγόρημα plus μπορεί να ορισθεί ως: plus(x,y,z):-z is X+Y Μειονέκτημα: Χάνεται η αντιστρεψιμότητα κάποιων προγραμμάτων 63

Κατηγορήματα Η ερώτηση?-plus(a,b,8) θα δώσει μήνυμα λάθους (και όχι όλα τα ζεύγη φυσικών με άθροισμα 8). Αυτό συμβαίνει γιατί η παραπάνω ερώτηση ανάγεται από το μηχανισμό της Prolog στην ερώτηση?-8 is A+B 64

Κατηγορήματα Με χρήση κατηγορημάτων συστήματος μπορούν να γραφούν προγράμματα, που εκτελούν αριθμητικές πράξεις με το συνηθισμένο τρόπο: sumlist([],0). sumlist([i L],Sum):-sumlist(L,S), Sum is S+I. 65

Αποκοπή Προγράμματα Prolog Αναποτελεσματικά, γιατί το δένδρο αναζήτησης είναι αρκετά μεγάλο Ενδιαφέρον Ύπαρξη λύσης προβλήματος Όχι για την ποσότητα ή είδος λύσεων 66

Αποκοπή Δεν είναι απαραίτητο ο μηχανισμός εκτέλεσης της Prolog να διασχίσει ολόκληρο το δέντρο αναζήτησης, αλλά ένα μέρος του. Ο προγραμματιστής καθοδηγεί το μηχανισμό αναζήτησης προς αποφυγή περιττών αναζητήσεων με τη βοήθεια της αποκοπής (cut) (σύμβολο (!)). 67

Παράδειγμα 7.6 Έστω ερώτηση της μορφής? A, B, C. Και το ακόλουθο τμήμα προγράμματος... Β: -Α 1,...Αk,!, Ak+1,, An. B: -Do,, Dm. B: -Fo,, Fk. 68

Ρόλος Αποκοπής Όταν ο μηχανισμός εκτέλεσης της Prolog περάσει από την αποκοπή, τότε τα Α1,...,Ak δεν πρόκειται να ξαναεξεταστούν για επιπλέον λύσεις οι εναλλακτικές προτάσεις για το Β, που υπάρχουν στο πρόγραμμα μετά την πρόταση, που περιέχει την αποκοπή, δεν πρόκειται να εξεταστούν Κάποιες λύσεις αποκόπτονται από τη διαδικασία 69

Παράδειγμα 7.7 Έστω το πρόγραμμα: father(tom,jim). male(jim). son(x,y):-father(y,x), male(x). son(george, jim). son(john, nick). Και η ερώτηση?-son(s,f). 70

Παράδειγμα 7.7 Ο μηχανισμός της Prolog θα δώσει τρεις λύσεις: {S=jim, F=tom} {S=george, F=jim} {S=john, F=nick} 71

Παράδειγμα 7.7 Αν το πρόγραμμα αντικατασταθεί με το: father(tom,jim). male(jim). son(x,y):-father(y,x),!,male(x). son(george, jim). son(john, nick). 72

Παράδειγμα 7.7 Ο μηχανισμός εκτέλεσης της Prolog δίνει τη λύση {S=jim, F=tom}. Οι άλλες δύο λύσεις αποκόπτονται λόγω του συμβόλου!, που δεν επιτρέπει την εξέταση των εναλλακτικών προτάσεων για το son(s,f). 73

Σχόλια Η αποκοπή χρησιμοποιείται συνήθως όταν γνωρίζουμε ότι το πρόβλημα έχει μία και μοναδική λύση και επιθυμούμε τον περιορισμό άσκοπου ψαξίματος. Τα προγράμματα είναι έτσι πιο αποτελεσματικά. Η αποκοπή δεν ανήκει στο λογικό τμήμα της Prolog και γι αυτό ενδέχεται να δημιουργήσει δυσνόητα προγράμματα. Λανθασμένη χρήση της περικόπτει λύσεις χρήσιμες και επιθυμητές. 74