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

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

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

Συστήματα Γνώσης. Πρακτικό Κομμάτι Μαθήματος Το Σύστημα Κανόνων CLIPS. Νίκος Βασιλειάδης, Αναπλ. Καθηγητής Τμήμα Πληροφορικής

Οικονόμου Παναγιώτης. Οι διαφάνειες παρουσιάζονται κατόπιν άδειας της Δρ. Ελπινίκης Παπαγεωργίου.

Συστήματα Γνώσης. Πρακτικό Κομμάτι Μαθήματος Συναρτήσεις στο CLIPS. Νίκος Βασιλειάδης, Αναπλ. Καθηγητής Τμήμα Πληροφορικής

Συστήματα Γνώσης. Πρακτικό Κομμάτι Μαθήματος Προτεραιότητα Κανόνων και Στρατηγικές Επίλυσης Συγκρούσεων

Συστήματα Γνώσης. Πρακτικό Κομμάτι Μαθήματος Πρότυπα Γεγονότων. Νίκος Βασιλειάδης, Αναπλ. Καθηγητής Τμήμα Πληροφορικής

Συστήματα Γνώσης. Πρακτικό Κομμάτι Μαθήματος Περιορισμοί στις Συνθήκες Κανόνων. Νίκος Βασιλειάδης, Αναπλ. Καθηγητής Τμήμα Πληροφορικής

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

Εισαγωγή στο κέλυφος ανάπτυξης έµπειρων συστηµάτων του CLIPS

CLIPS Σύντομη Εισαγωγή - Περιγραφή του Μηχανισμού Εκτέλεσης

Rule Based systems Συστήματα Βασισμένα σε κανόνες

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

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

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

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

Π2 Το Σύστηµα Κανόνων CLIPS

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

2.1. Εντολές Σχόλια Τύποι Δεδομένων

ΗΥ-150. Προγραμματισμός

ΗΥ-150. Προγραμματισμός

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

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

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

Π1 Το Σύστηµα Κανόνων CLIPS

Εισαγωγή στην γλώσσα προγραμματισμού C

Δομημένος Προγραμματισμός (ΤΛ1006)

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

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

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

Πληρουορική Γ Γσμμασίοσ

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Εισαγωγή στον Προγ/μό Υπολογιστών

ΕΡΓΑΣΗΡΙΟ CLIPS ΑΣΚΗΣΗ 6

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

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

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

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

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

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

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

Εισαγωγή στην PHP. ΕΣΔ 516 Τεχνολογίες Διαδικτύου. Περιεχόμενα. Περιεχόμενα. ΕΣ 516: Τεχνολογίες ιαδικτύου. ΕΣ 516: Τεχνολογίες ιαδικτύου

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

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

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές

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

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

Σχολικό Βιβλίο - Κεφάλαιο 7 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PASCAL ΠΑΡΟΥΣΙΑΣΗ 13

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

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

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

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

Αναφορά (1/2) Μπορούμε να ορίσουμε μια άλλη, ισοδύναμη αλλά ίσως πιο σύντομη, ονομασία για ποσότητα (μεταβλητή, σταθερή, συνάρτηση, κλπ.

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

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

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

Ενδεικτικές Ερωτήσεις Θεωρίας

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

Εντολές ελέγχου ροής if, for, while, do-while

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

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

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

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

ΑΣΚΗΣΗ 3: ΠΡΟΤΑΣΕΙΣ, ΕΚΦΡΑΣΕΙΣ ΚΑΙ ΤΕΛΕΣΤΕΣ

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

Γλώσσα Προγραμματισμού C

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

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

Συναρτήσεις και διαδικασίες

οµές Επιλογής Εντολές if και switch

ΣΤΗΛΗ Β ΑΠΟΤΕΛΕΣΜΑ 1. float(10) α pow(2,3) β abs(-10) γ int(5.6) δ. 10 ε. 5.6 Μονάδες 8 ΣΤΗΛΗ Α ΣΥΝΑΡΤΗΣΗ

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

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

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

Εντολές επιλογής Επαναλήψεις (if, switch, while)

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα.

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

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

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

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

Εισαγωγή στην PHP. ΕΣΔ 232 Διαχείριση Δεδομένων στη Κοινωνία της Πληροφορίας. Περιεχόμενα. Περιεχόμενα

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

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

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

Οι εντολές ελέγχου της ροής ενός προγράμματος.

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

Εισαγωγή - Βασικές έννοιες. Ι.Ε.Κ ΓΛΥΦΑΔΑΣ Τεχνικός Τεχνολογίας Internet Αλγοριθμική Ι (Ε) Σχολ. Ετος A Εξάμηνο

Transcript:

ΧΑΡΟΚΟΠΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΜΑΤΙΚΗΣ ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ ΛΟΓΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η ΓΛΩΣΣΑ PROLOG ΤΟ ΣΥΣΤΗΜΑ ΚΑΝΟΝΩΝ CLIPS Καραγιώργου Σοφία

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

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

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

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

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

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

Βασικά στοιχεία PROLOG Γεγονότα father(george,mary). Κανόνες parent(x,y):-father(x,y). parent(x,y):-mother(x,y). Ερωτήματα?-parent(X,Y). Χ=george,Y=mary; yes

Βασικά στοιχεία PROLOG Υπάρχουν προτάσεις σε μια βάση γνώσης, κάποιες μπορεί να είναι γεγονότα και κάποιες άλλες κανόνες Στο τέλος κάθε πρότασης υπάρχει τελεία «.» Κατηγορήματα, πχ parent, father κτλ Το κόμμα (,) υποδηλώνει σύζευξη κατηγορημάτων Το ερωτηματικό (;) υποδηλώνει διάζευξη κατηγορημάτων Μεταβλητές και συγκεκριμενοποίηση (instantiation)?- woman(x). X=mia

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

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

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

Παράδειγμα Γνώση 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). Αποθηκεύεται σε ένα αρχείο, π.χ. family.pl Φορτώνεται:?-consult( family.pl ).

Παράδειγμα Ερωτήματα Είναι ο george πατέρας της mary??-father(george,mary). yes Ποιος (Χ) έχει πατέρα τον peter??-father(peter,x). X=marina Ποια είναι τα ζεύγη (Χ Υ) για τα οποία το Χ είναι mother του Υ??-mother(X,Y). X=helen,Y=mary; X=helen,Y=nick; X=ann,Y=marina; no

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

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

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

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

Παράδειγμα - Αναδρομή Παράδειγμα parent(john,george). parent(john,nick). parent(jim,bill). parent(jim,jack). parent(gregory,john). parent(gregory,jim). parent(bob,gregory). parent(joseph,bob). Μπορούμε να ορίσουμε ένα κατηγόρημα για τον πρόγονο? π.χ. predecessor(x,z)

Παράδειγμα - Αναδρομή Λύση πρώτη predecessor(x,z):-parent(x,z). predecessor(x,z):-parent(x,y),parent(x,z). predecessor(x,z):-parent(x,y),parent(y,w),parent(w,z). Λύση δεύτερη predecessor(x,z):-parent(x,z). predecessor(x,z):-parent(x,y),predecessor(υ,z)

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

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

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

Δομές δεδομένων Σύνθετες δομές δεδομένων triangle(point(0,0),point(1,4),point(5,12))..(a,.(b,.(c,[]))). Παραδείγματα λιστών member/2 append/3 [a b c]. [[a,b],c]. [mia,vincent,jules,yolanda] [mia,robber(honeybunny),x,2,mia] [] [mia,[vincent,jules],[butch,friend(butch)]] [[], dead(z), [2, [b,c]], [ ], Z, [2, [b,c]]]

Ενσωματωμένα κατηγορήματα Μαθηματικές πράξεις ==/2 Ίσο =/2 Ανάθεση \==/2 Διάφορο is/2 αποτιμά αριθμητικές εκφράσεις?-x is 3 + 4 X=7?-9 is 3 * 3. Yes Διαδικασίες εισόδου εξόδου?-read(x). :hello. X=hello?-write(hello),nl,write(world),nl. hello world yes

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

Όροι Γράφουμε προγράμματα όχι μόνο με χρήση κανόνων και γεγονότων Συνδυάζουμε δομικά στοιχεία, αναδρομή, κτλ

Ορίσματα Στην Prolog δεν γίνεται καθορισμός ποια από τα ορίσματα ενός κατηγορήματος είναι είσοδοι και ποια έξοδοι Πολλά προγράμματα έχουν διαφορετικές χρήσεις

Modules και αρχεία Modules :- module(printmovies,[printmovies/1]). Ορισμός :- use_module(library(lists)). Χρήση Αρχεία at_end_of_stream(s) open/3, write/2, close/1 εγγραφή σε αρχείο open/3, read/2, close/1 ανάγνωση από αρχείο

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

Δέντρο εκτέλεσης της ερώτησης?-grandparent(a,b)

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

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

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

Μαθηματικές σχέσεις φυσικών αριθμών Σχέση 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).

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

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

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

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

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

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

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

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

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

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

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

Παράδειγμα Πρόγραμμα για έλεγχο του αν ένα δεδομένο στοιχείο ανήκει σε ένα δέντρο ή όχι. Το πρόγραμμα είναι ανάλογο με το 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).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Το σύστημα κανόνων CLIPS Λίστα Γεγονότων (facts list) (name george) Βάση κανόνων (rule/knowledge base) (defrule rain in case of rain (weather rain) => (assert (action take umbrella ))) Μηχανισμός Εξαγωγής Συμπερασμάτων (Inference Engine) Στρατηγικές Eπίλυσης Ανταγωνισμού (Conflict Resolution Strategies)

Εκτέλεση Προγράμματος Πρόγραμμα Ένα σύνολο από κανόνες και γεγονότα Εκτέλεση Ακολουθία από πυροδοτήσεις κανόνων των οποίων οι συνθήκες ικανοποιούνται Ικανοποίηση συνθηκών Ταυτοποίηση με γεγονότα Η εκτέλεση τερματίζεται όταν: Δεν υπάρχουν άλλοι κανόνες προς πυροδότηση Κληθεί συγκεκριμένη εντολή τερματισμού (halt)

Κύκλος Λειτουργίας CLIPS Εύρεση όλων των κανόνων των οποίων οι συνθήκες ικανοποιούνται και προσθήκη τους στην agenda (agenda - conflict set) Αν η ατζέντα είναι κενή τότε η εκτέλεση τερματίζεται Επιλογή ενός κανόνα με βάση τη στρατηγική επίλυσης ανταγωνισμού (conflict resolution) και εκτέλεσή του Επιστροφή στο βήμα 1, εκτός αν υπάρχει εντολή τερματισμού (halt)

Σύνταξη του CLIPS Θυμίζει LISP Είναι Case-Sensitive Δομικά Στοιχεία: Σύμβολα, π.χ. you, why_this, good-morning Αλφαριθμητικά, π.χ. This is a String Αριθμοί, π.χ. 24,-45.6, 8e11 Σχόλια: ότι ακολουθεί τον χαρακτήρα ; Μεταβλητές Μονότιμες π.χ.?var,?x Πολλαπλών Τιμών π.χ. $?fruits, $?shopping

Μεταβλητές Εμφανίζονται Στις συνθήκες ενός κανόνα Στις ενέργειες ενός κανόνα Παίρνουν τιμές Κυρίως στις συνθήκες των κανόνων μέσω της διαδικασίας ταυτοποίησης Η ανάθεση τιμής σε μεταβλητή στις ενέργειες ενός κανόνα είναι δυνατή με τη χρήση κατάλληλης συνάρτησης, αλλά καλό είναι να αποφεύγεται Η εμβέλεια των μεταβλητών περιορίζεται στον κανόνα που αυτές εμφανίζονται

Γεγονότα Λίστες από σύμβολα που περικλείονται σε παρενθέσεις π.χ. (name John Papas) (shopping_list cheese wine bread book) (days Monday Friday Sunday) Κάθε γεγονός έχει μοναδικό αριθμό-ταυτότητα (fact index) που καθορίζεται αυτόματα Εμφάνιση γεγονότων CLIPS> (facts) f-0 (name John Papas) for a total of 1 fact.

Εισαγωγή Γεγονότων Με τη χρήση της εντολής assert (assert <fact>) CLIPS> (assert (gift book)) <Fact-0> CLIPS> (facts) f-0 (gift book) for a total of 1 fact. CLIPS> (assert (day Monday) (phone 891363)) CLIPS> (facts) f-0 (gift book) f-1 (day Monday) f-2 (phone 891363) for a total of 3 facts.

Εισαγωγή Γεγονότων Με τη χρήση της εντολής deffacts (μαζί με reset) (deffacts <name> comments (<fact1>) (<fact2>) (<fact n>) )

Εντολή deffacts CLIPS> (deffacts colours this is to insert some colours (colour red)(colour blue)(colour green)) CLIPS> (reset) CLIPS> (facts) f-0 (initial-fact) f-1 (colour red) f-2 (colour blue) f-3 (colour green) for a total of 4 facts. CLIPS> (facts 2) f-2 (colour blue) f-3 (colour green) for a total of 2 facts.

Επιτρέπονται διπλά γεγονότα? CLIPS> (assert (name nick)) <Fact-0> CLIPS> (facts) f-0 (name nick) For a total of 1 facts. CLIPS> (assert (name nick)) FALSE CLIPS> (facts) f-0 (name nick) For a total of 1 facts.

Διαγραφή Γεγονότων Χρήση της εντολής (retract) (retract <fact-index>) CLIPS> (retract 1 3) CLIPS> (facts) f-0 (initial-fact) f-2 (colour blue) for a total of 2 facts. CLIPS> (retract 1) [PRNUTIL1] Unable to find fact-1 Χρήση της εντολής (clear)

Παρακολούθηση Προσθήκης και Διαγραφής Γεγονότων Χρήση της εντολής (watch facts) CLIPS> (watch facts) CLIPS> (assert (age 23)) ==> f-0 (age 23) <Fact-0> CLIPS> (reset) <== f-0 (age 23) ==> f-0 (initial-fact) CLIPS> (assert (mobile 0977233445)) ==> f-1 (mobile 0977233445) <Fact-1> CLIPS> (retract 1) <== f-1 (mobile 0977233445) CLIPS> (facts) f-0 (initial-fact) for a total of 1 fact.

Κανόνες Μορφή: if (Συνθήκες) then (Ενέργειες) Συνθήκες: Γεγονότα & Μεταβλητές Ενέργειες: Πράξεις (εντολές) μετά την ενεργοποίηση του κανόνα Σημασία: Εάν ικανοποιούνται οι συνθήκες (δηλαδή ταυτοποιούνται με τη λίστα γεγονότων) Τότε εκτέλεσε τις ενέργειες

Κανόνες Σύνταξη: (defrule <όνομα κανόνα> <σχόλια> (<συνθήκη 1>) (<συνθήκη n>) => (<εντολή 1>) (<εντολή m>) )

Κανόνες Παράδειγμα (defrule soccer-time Warns for your soccer time (day sunday) (time afternoon) => (assert (go for soccer)))

Ταυτοποίηση

Ταυτοποίηση

Build-in Συναρτήσεις Βασικές Αριθμητικές Συναρτήσεις (+ <ορίσματα>) (- <ορίσματα>) (* <ορίσματα>) (/ <ορίσματα>) Συναρτήσεις σύγκρισης αριθμών (= <ορίσματα>) (< <ορίσματα>) (>= <ορίσματα>) (> <ορίσματα>) (<= <ορίσματα>) (<> <ορίσματα>) Οι ακόλουθες συναρτήσεις επιστρέφουν TRUE (>= 5 5 4 2 2 1) (<= 2 3 3 4 6) (<> 3 5)

Λογικές Συναρτήσεις Δυνατότητα να εκφραστούν πολύπλοκες συνθήκες κανόνων (and <ορίσματα>) (or <ορίσματα>) (not <όρισμα>) (eq <ορίσματα>) (neq <ορίσματα>) Οι ακόλουθες συναρτήσεις επιστρέφουν TRUE (and (>= 5 5) (> 3 2 1) (= 10 10)) (and (not (= 10 7)) (= 9 9))

Λογικές Συναρτήσεις (defrule days (month Jan mon) (or (hour 12) (hour 13)) => (assert (day is Monday noon time)) ) (defrule days (month Jan mon) (or (and (hour 12) (lunch break)) (and (hour 17) (departure time)) ) => (assert (office closed at this hour)) )

Συναρτήσεις εισόδου - εξόδου (printout <device> <expression>) Αποστέλλει την έκφραση <expression> στη συσκευή <device> Η συσκευή μπορεί να είναι ένα αρχείο ή η οθόνη Για οθόνη, χρησιμοποιούμε t (terminal) (printout t "The day was "?type crlf) The day was sunny Το σύμβολο crlf δηλώνει αλλαγή γραμμής

Συναρτήσεις εισόδου - εξόδου (read) Eισάγει σύμβολο από τo πληκτρολόγιο Συνήθως χρησιμοποιείται σε συνδυασμό με την εντολή bind, για ανάθεση τιμής σε μεταβλητή στις ενέργειες ενός κανόνα (defrule get-user-answer (initial-fact) => (printout t "What s your name: ") (bind?name (read)) (assert (user-name?name)) )

Ανάθεση τιμής σε μεταβλητή (bind <variable> <value>) Ανατίθεται η τιμή <value> σε μια μεταβλητή <variable> στις ενέργειες των κανόνων (defrule rule1 "example rule" (oldcost?oldcost) (newcost?newcost) => (bind?total_cost (+?newcost?oldcost)) (assert (cost?total_cost)) (printout t "The total cost is "?total_cost crlf) )

Έλεγχος ροής προγράμματος (while) Έστω ότι υπάρχει ένα γεγονός (num 1) Τύπωσε όλους τους αριθμούς από το 1 μέχρι το 9, με τη φράση "the num is:" σαν πρόθεμα (defrule test (num?n) => (while (<?n 10) do (printout t "the num is: "?n crlf) (bind?n (+ 1?n)) ) )

Έλεγχος ροής προγράμματος (if-else) Τύπωσε positive, negative ή zero, αν ο αριθμός?n είναι μεγαλύτερος, μικρότερος ή ίσος με μηδέν (defrule sign (num?n) => (if (>?n 0) then (printout t "positive" crlf)) else (if (<?n 0) then (printout t "negative" crlf) else (printout t "zero" crlf)) ) )

Η χρήση του not Aν εμφανίζονται μεταβλητές μέσα σε κάποιο (not...) τότε δε γίνεται ανάθεση τιμών σε αυτές (defrule wrong-rule (not (element?b)) => (printout t "not element"?b crlf) )

Μεγάλα/Σύνθετα Γεγονότα Σε μεγάλα προγράμματα χρειάζεται να αναπαρασταθεί η πληροφορία με μεγάλα ή σύνθετα γεγονότα Π.χ. βάση δεδομένων μαθητών: (student name <name> surname <surname> sex <sex> age <age> classes <classes>) (student name john surname ref sex male age 28 classes math physics chem)

Agenda και Εκτέλεση Κανόνων Όλοι οι κανόνες των οποίων οι συνθήκες ικανοποιούνται εισάγονται στην agenda Σύνολο συγκρούσεων (conflict set) Από την agenda επιλέγεται κάθε φορά 1 μόνο κανόνας, ο οποίος και πυροδοτείται με βάση 2 κριτήρια: την προτεραιότητα των κανόνων τη στρατηγική επίλυσης συγκρούσεων

Η Agenda ως Στοίβα Η ατζέντα συμπεριφέρεται σαν στοίβα (stack) όπου όσο μεγαλύτερη προτεραιότητα έχει ένας κανόνας τόσο πιο ψηλά βρίσκεται σε αυτή Κάθε φορά εκτελείται ο κανόνας που βρίσκεται στην κορυφή της στοίβας Ένας νέος κανόνας τοποθετείται στην ατζέντα σύμφωνα με τα ακόλουθα κριτήρια: Προτεραιότητα (salience) Στρατηγική Επίλυσης Συγκρούσεων Αυθαίρετη σειρά

Τοποθέτηση Κανόνα στην Agenda Οι νέοι κανόνες μπαίνουν "πάνω" από όλους τους κανόνες με μικρότερη ή ίση προτεραιότητα (salience) και "κάτω" από όλους τους κανόνες με μεγαλύτερη προτεραιότητα Στους κανόνες με ίδια προτεραιότητα χρησιμοποιείται η τρέχουσα στρατηγική επίλυσης συγκρούσεων για να καθοριστεί η σειρά τους

Τοποθέτηση Κανόνα στην Agenda Εάν κάποιοι κανόνες ενεργοποιήθηκαν από το ίδιο σύνολο γεγονότων και τα προηγούμενα βήματα δεν μπόρεσαν να ορίσουν μία σειρά, τότε δίνεται σε αυτούς μια αυθαίρετη σειρά (όχι τυχαία), η οποία εξαρτάται από την υλοποίηση του συστήματος

Προτεραιότητα Κανόνων Σύνταξη (μέσα στον ορισμό του κανόνα) (declare (salience <number>)) Παράδειγμα: (defrule cartesian (declare (salience 30)) (element?a) (element?b) => (printout t "Elements: "?a " "?b crlf))

Ιδιότητες Προτεραιότητας Κανόνα Είναι ακέραια αριθμητική τιμή Όσο μεγαλύτερη είναι, τόσο μεγαλύτερη είναι και η προτεραιότητα του κανόνα Οι επιτρεπτές τιμές είναι από -10000 έως 10000 Εάν δεν υπάρχει δήλωση, ο κανόνας θεωρείται ότι έχει την προκαθορισμένη τιμή μηδέν

Χρήση προτεραιότητας (defrule MAIN::start (declare (salience 10000)) => (set-fact-duplication TRUE) (focus QUESTIONS CHOOSE-QUALITIES WINES PRINT-RESULTS) ) (defrule MAIN::combine-certainties "" (declare (salience 100))?rem1 <- (attribute (name?rel) (value?val) (certainty?per1))?rem2 <- (attribute (name?rel) (value?val) (certainty?per2)) (test (neq?rem1?rem2)) => (retract?rem1) (modify?rem2 (certainty (/ (- (* 100 (+?per1?per2)) (*?per1?per2)) 100))) )