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



Σχετικά έγγραφα
ΠΑΡΑ ΕΙΓΜΑΤΑ ΣΤΗ ΓΛΩΣΣΑ PROLOG ΠΑΡΑ ΕΙΓΜΑ 1

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ. Λύση Ασκήσεων

Λογικός Προγραµµατισµός: Η Γλώσσα Prolog

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ PROLOG Ι. ΧΑΤΖΗΛΥΓΕΡΟΥ ΗΣ

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

Δομές Δεδομένων & Αλγόριθμοι

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

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

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

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

Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Δέντρα Αναζήτησης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

ΗΥ360 Αρχεία και Βάσεις εδοµένων

Printed November 5, 2012 at 8:37

ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

ιαφάνειες παρουσίασης #10 (β)

Ασκήσεις Prolog. Άσκηση 1. Άσκηση 2

Red-black δέντρα (Κεφ. 5)

Διάλεξη 11: Δέντρα Ι - Εισαγωγή σε Δενδρικές Δομές Δεδομένων

Β Ομάδα Ασκήσεων "Λογικού Προγραμματισμού" Ακαδημαϊκού Έτους

Βασικές δοµές δεδοµένων. Ορολογία λιστών. 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Υλοποίηση δοµών δεδοµένων 8.3 Μια σύντοµη υπόθεση εργασίας

Δημιουργία Δυαδικών Δέντρων Αναζήτησης

Ν. Μ. Μισυρλής. Τµήµα Πληροφορικής και Τηλεπικοινωνιών, Πανεπιστήµιο Αθηνών. Καθηγητής: Ν. Μ. Μισυρλής 29 Μαΐου / 18

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

Διάλεξη 11: Δέντρα Ι Εισαγωγή σε Δενδρικές Δομές Δεδομένων

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Γραφήματα. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

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

Οντοκεντρικός Προγραμματισμός

Μη γράφετε στο πίσω μέρος της σελίδας

Ισοζυγισμένα υαδικά έντρα Αναζήτησης

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ

Δέντρα Απόφασης (Decision(

ΠΡΟΓΡΑΜΜΑ synartisi_se_diadikasia ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: A[10], max, i, C, S, B, maxmax ΑΡΧΗ

Εργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ουρές Προτεραιότητας. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

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

Διάλεξη 14: Δέντρα IV - B-Δένδρα

Διδάσκων: Κωνσταντίνος Κώστα

Εισαγωγή στον Προγραμματισμό Python Μάθημα 3: πίνακες και βρόγχος επανάληψης for (για) Νοέμβριος 2014 Χ. Αλεξανδράκη, Γ.

Red- black δέντρα Εκτενείς Δομές Δεδομένων (Κεφ. 5)

Γνωρίστε το Excel 2007

Εισαγωγή ενός νέου στοιχείου. Επιλογή i-οστoύ στοιχείου : Εύρεση στοιχείου με το i-οστό μικρότερο κλειδί

Μπαλτάς Αλέξανδρος 21 Απριλίου 2015

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Βασικές Ιδιότητες και Διάσχιση Κεφάλαιο 5 ( και ) Ε. Μαρκάκης Επίκουρος Καθηγητής

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

Διάλεξη 14: Δέντρα IV B Δένδρα. Διδάσκων: Παναγιώτης Ανδρέου

Λογικός Προγραμματισμός Ασκήσεις

8.6 Κλάσεις και αντικείμενα 8.7 Δείκτες σε γλώσσα μηχανής

ΕΡΓΑΣΤΗΡΙΟ ΠΛΗΡΟΦΟΡΙΚΗ I. 3o ΕΡΓΑΣΤΗΡΙΟ ΕΠΕΞΕΡΓΑΣΙΑ ΜΕ ΤΟ WORD

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ Η/Υ ΠΡΩΤΗ ΠΡΟΟΔΟΣ ΣΤΗΝ «ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Y»

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

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

Κύρια σηµεία για µελέτη. έντρα. Ορολογία δέντρων. Τι είναι δέντρο

Εντολές της LOGO (MicroWorlds Pro)

ΕΡΓΑΣΙΕΣ ΟΝΤΟΚΕΝΤΡΙΚΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Κεφάλαιο Λύσεις των Ασκήσεων του Βιβλίου «PROγραµµατίζοντας στη LOGική» Ρεφανίδης Γιάννης

1. Λογικά λάθη ονομάζονται αυτά που οφείλονται σε σφάλματα κατά την υλοποίηση του αλγόριθμου.

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

Ακρότατα πίνακα, χωρίς min, max, μόνο με pos

Μαθηματική Λογική και Λογικός Προγραμματισμός

Εργαστήριο 5. Εαρινό Εξάμηνο

HY Λογική Διδάσκων: Δ. Πλεξουσάκης Εαρινό Εξάμηνο. Φροντιστήριο 6

Υπολογιστική Λογική και Λογικός Προγραμματισμός

φροντιστήρια Θέματα Ανάπτυξης Εφαρμογών σε Προγραμματιστικό Περιβάλλον Γ λυκείου Προσανατολισμός Σπουδών Οικονομίας και Πληροφορικής

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Διάλεξη 15η: Αναδρομή, μέρος 1ο

Συγκρίσιμα Αντικείμενα (comparable)

Μαθηματικά των Υπολογιστών και των Αποφάσεων Τεχνητή Νοημοσύνη 1η Σειρά Ασκήσεων

Αναδρομικός αλγόριθμος

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Δομές Αναζήτησης. κλειδί από ολικά διατεταγμένο σύνολο. Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου

ΥΣ02 Τεχνητή Νοημοσύνη Χειμερινό Εξάμηνο

Τελικός Κύκλος Διαγωνισμάτων Γ ΛΥΚΕΙΟΥ Κυριακή 17 Απριλίου 2016 Μάθημα: Α.Ε.Π.Π. KTIΡΙΟ ΤΜΗΜΑΤΑ ΚΑΛΟΚΑΙΡΙΝΑ ΑΡΓΥΡΟΥΠΟΛΗΣ - ΗΛΙΟΥΠΟΛΗΣ - ΓΛΥΦΑΔΑΣ

Δέντρα (Trees) - Ιεραρχική Δομή

- Το πρόγραµµα σας δίνει τα αναµενόµενα αποτελέσµατα.

Προγραμματισμός Υπολογιστών με C++

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

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Δυαδικά Δέντρα Αναζήτησης (Binary Search Trees) Ορισμός : Ένα δυαδικό δέντρο αναζήτησης t είναι ένα δυαδικό δέντρο, το οποίο είτε είναι κενό είτε:

PROJECT ΣΤΟ ΜΑΘΗΜΑ ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΕΥΡΕΤΙΚΕΣ ΜΕΘΟ ΟΥΣ

Δένδρα. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

ΕΝΟΤΗΤΑ 9 ΕΝΩΣΗ ΞΕΝΩΝ ΣΥΝΟΛΩΝ ( ΟΜΕΣ UNION-FIND)

Ασκήσεις Prolog. Άσκηση 1. Άσκηση 2

έντρα ομές εδομένων 3ο εξάμηνο ιδάσκων: Χρήστος ουλκερίδης ιαφάνειες προσαρμοσμένες από το υλικό της Μαρίας Χαλκίδη

ΟιβασικέςπράξειςπουορίζουντονΑΤΔ δυαδικό δέντρο αναζήτησης είναι οι ακόλουθες:

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

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

Δεντρικά Ευρετήρια. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Ουρές Προτεραιότητας: Υπενθύμιση. Σωροί / Αναδρομή / Ταξινόμηση. Υλοποίηση Σωρού. Σωρός (Εισαγωγή) Ορέστης Τελέλης

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

Transcript:

1. Δίνονται τα εξής γεγονότα «Ο Παύλος είναι πατέρας του Γιάννη και της Γεωργίας» και «Η Ελένη είναι μητέρα της Μαρίας και του Πέτρου». Επίσης, μας δίνεται και η εξής γνώση τύπου κανόνα, που αφορά το πότε δύο άνθρωποι είναι αδέλφια «Δύο άνθρωπο είναι αδέλφια αν είτε έχουν τον ίδιο πατέρα είτε έχουν την ίδια μητέρα». (α) Ζητείται να αναπαρασταθεί η παραπάνω γνώση σε Prolog, ώστε να δημιουργηθεί αντίστοιχο πρόγραμμα. (β) Τι θα απαντήσει η Prolog στο ερώτημα «Ποια είναι αδέλφια του Γιάννη;» (Υλοποιείστε το ερώτημα σε Prolog). (γ) Αν οι απαντήσεις στο (β) περιλαμβάνουν και τον Γιάννη (ως αδελφό του εαυτού του), τότε τροποποιείστε το πρόγραμμα που κάνατε στο (α) για να επαλειφθεί αυτή η περίπτωση. ΛΥΣΗ (α) Το πρόγραμμα θα έχει ως εξής is_father(paul, john). is_father(paul, georgia). is_mother(helen, mary). is_mother(helen, peter). siblings(x, Y) - is_father(z, X), is_father(z, Y). siblings(x, Y) - is_mother(z, X), is_mother(z, Y). (β) Αν θέσουμε στην Prolog το ερώτημα?- siblings(georgia, john). τότε θα εκτυπωθεί Yes Το ζητούμενο ερώτημα σε Prolog είναι siblings(x, john).αν θέσουμε αυτό το ερώτημα?- siblings(χ, john). τότε θα εκτυπωθεί X = john ; X = georgia ; Εδώ το σημαίνει ότι δεν υπάρχουν άλλες απαντήσεις-λύσεις. Όπως είναι φανερό, το πρόγραμμα εξάγει το συμπέρασμα ότι ο Γιάννης είναι αδελφός του εαυτού του, το οποίο δεν θα θέλαμε να εξάγεται. (γ) Για να αποτρέψουμε την προηγούμενη κατάσταση, κάνουμε τις εξής προσθήκες is_father(paul, john). is_father(paul, georgia).

is_mother(helen, maria). is_mother(helen, peter). equal(john, john). equal(georgia, georgia). equal(maria, maria). equal(peter, peter). siblings(x, Y) - is_father(z, X), is_father(z, Y),not(equal(X, Y)). siblings(x, Y) - is_mother(z, X), is_mother(z, Y),not(equal(X, Y)). Εναλλακτικά, κρατάμε το πρόγραμμα του (α) όπως έχει αλλάζοντας μόνο τους δύο κανόνες ως εξής siblings(x, Y) - is_father(z, X), is_father(z, Y), \+ Χ==Υ. siblings(x, Y) - is_mother(z, X), is_mother(z, Y), \+ Χ==Υ. Στη θέση του \+ Χ==Υ μπορεί να μπει και το not(x=y). Μπορεί ακόμα να χρησιμοποιηθεί το Χ \= Υ. Τώρα, αν θέσουμε το ερώτημα?- siblings(χ, john). θα εκτυπωθεί X = georgia ; 2. Δίνεται το παρακάτω δυαδικό δέντρο (α) Να γράψετε πρόγραμμα Prolog που να αναπαριστά το παραπάνω δέντρο με μια σειρά από γεγονότα, χρησιμοποιώντας το κατηγόρημα tree/3. (β) Να συμπληρώσετε το πρόγραμμα με κανόνα(ες) έτσι ώστε να διαπερνά το δέντρο κατά βάθος με ταυτόχρονη εκτύπωση των ονομάτων των κόμβων (δηλ. Giorgos-Giannis-Petros-Kyriakos-Eleni-Anna-Katerina). (γ) Το ίδιο με το (β) για διαπέραση κατά πλάτος (δηλ. Giorgos-Giannis-Eleni- Petros-Kyriakos-Anna-Katerina). ΛΥΣΗ (α) Να γράψετε πρόγραμμα Prolog που να αναπαριστά το παραπάνω δέντρο

με μια σειρά από γεγονότα, χρησιμοποιώντας το κατηγόρημα tree/3. Για να αναπαραστήσουμε την λειτουργία του παραπάνω δέντρου στην Prolog ορίζουμε γεγονότα της μορφής tree(x, Y, Z) που δηλώνουν πως ο κόμβος Χ του δέντρου είναι γονέας των Υ και Ζ, με τον Υ να είναι το αριστερό παιδί του Χ και τον Ζ να είναι το δεξί παιδί του Χ. Εχουμε tree(giorgos, giannis, eleni). tree(giannis, petros, kyriakos). tree(eleni, anna, katerina). tree(petros,nil,nil). tree(kyriakos, nil, nil). tree(anna,nil,nil). tree(katerina,nil,nil). (β) Να συμπληρώσετε το πρόγραμμα με κανόνα(ες) έτσι ώστε να διαπερνά το δέντρο κατά βάθος με ταυτόχρονη εκτύπωση των ονομάτων των κόμβων (δηλ. Giorgos-Giannis-Petros-Kyriakos-Eleni-Anna-Katerina). Αυτό που χρειάζεται είναι ο παρακάτω αναδρομικός κανόνας print_tree(x)-tree(x,y,z), write(x), nl, print_tree(y), print_tree(z). print_tree(x)-tree(x,nil,nil). Προκειμένου η εκκίνηση του προγράμματος να γίνεται με το κατηγόρημα go (χωρίς ορίσματα), προσθέτουμε τον κανόνα go- write('give Root '), read(t), nl, print_tree(t). Τo πρόγραμμα αυτό μπορεί να εφαρμοστεί σε δέντρα οποιουδήποτε βάθους. (γ) Το ίδιο με το (β) για διαπέραση κατά πλάτος (δηλ. Giorgos-Giannis-Eleni- Petros-Kyriakos-Anna-Katerina). Χρησιμοποιούμε τους παρακάτω κανόνες print_br(x)-write(x), nl, print_tree(x). print_tree(x)-tree(x,nil,nil). print_tree(x)-tree(x,y,z), write(y), nl, write(z), nl, print_tree(y), print_tree(z). Προκειμένου η εκκίνηση του προγράμματος να γίνεται με το κατηγόρημα go (χωρίς ορίσματα), προσθέτουμε τον κανόνα go- write('give Root '), read(t), nl, print_br(t). Το πρόγραμμα αυτό μπορεί να διαπεράσει κατα πλάτος το συγκεκριμένο δέντρο και οποιοδήποτε υποδέντρο του αλλά δεν δουλεύει σωστά για δέντρα οποιουδήποτε βάθους. Για να επιτύχουμε διαπέραση κατα πλάτος σε δέντρα οποιουδήποτε βάθους, χρειάζεται να χρησιμοποιήσουμε λίστες. Η λύση με λίστα θα ήταν

print_br(x,l)-write(x), nl, print_tree(x,l). print_tree(x,l)-tree(x,nil,nil). print_tree(x,l)-tree(x,y,z),write(y),nl,write(z),nl, L=[X Rest], append(rest,[y,z],l2), L2=[Next Tail], print_tree(next,l2). go- write('give Root '), read(t), nl, append([],[t],l), print_br(t,l). 3. Τι θα τυπώσει τo παρακάτω πρόγραμμα; what. what - what. α) - what, write('one'), nl, fail. Αν αλλάζαμε τo goal σε β) -!, what, write('two'), nl, fail. γ) - what,!, write('three'), nl, fail. δ) - what, write('four'), nl,!, fail. ε) - what, write('five'), nl, fail,!. ΛΥΣΗ α) ONE ONE ONE β) TWO TWO TWO γ) THREE δ) FOUR ε) FIVE FIVE FIVE

4. Θεωρήστε τo παρακάτω πρόγραμμα Prolog f(x,y,_)- assert(g(x,y)), fail. f(_,_,y)- retract(g(x,z)), Y is X+Z. Τι θα απαντήσει η Prolog στην ερώτηση?- f(11,8,x). ΛΥΣΗ X = 19 Η κλήση f(11,8,x) πρoκαλεί τη δημιoυργία τoυ γεγoνότoς g(11,8) μέσω της assert. Οταν o πρώτoς κανόνας απoτύχει, ενεργoπoιείται o δεύτερoς πoυ σβήνει τo g(11,8) από τoν Prolog Workspace. Αλλά τώρα τo X έχει την τιμή 11 και τo Z την τιμή 8, έτσι Y=19 πoυ είναι τo απoτέλεσμα. 5. Δημιουργήστε αναδρομική συνάρτηση που θα μετράει πόσα στοιχεία έχει μια λίστα. Για παράδειγμα αν την καλέσετε size([a,a,b],x) θα επιστρέψει X=3 ΛΥΣΗ size([],0). size([h T],N) - size(t,n1), N is N1+1.