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

Σχετικά έγγραφα
Ασκήσεις Prolog. Άσκηση 1. Άσκηση 2

ΚΕΦΑΛΑΙΟ 4: Σύνταξη Prolog Προγραμμάτων

ΚΕΦΑΛΑΙΟ 5: Σημασιολογία Prolog Προγραμμάτων

turnin Lab4.pro

ΟΝΟΜΑΤΕΠΩΝΥΜΟ : Αντικείμενα: Βάσεις δεδομένων, σχέσεις μεταξύ πινάκων, ερωτήματα, φόρμες και αναφορές.

ΑΣΚΗΣΗ 4 ΣΧΕΔΙΑΣΗ ΑΡΙΘΜΗΤΙΚΩΝ ΛΟΓΙΚΩΝ ΚΥΚΛΩΜΑΤΩΝ

! Εάν ο αριθμός διαθέτει περισσότερα bits, χρησιμοποιούμε μεγαλύτερες δυνάμεις του 2. ! Προσοχή στη θέση του περισσότερο σημαντικού bit!

i Το τρανζίστορ αυτό είναι τύπου NMOS. Υπάρχει και το συμπληρωματικό PMOS. ; Τι συμβαίνει στο τρανζίστορ PMOS; Το τρανζίστορ MOS(FET)

9 ο Μαθητικό Συνέδριο Πληροφορικής Κεντρικής Μακεδονίας. "My Binary Logic" Ένας προσομοιωτής λογικών πυλών στο Scratch

"My Binary Logic" Ένας προσομοιωτής λογικών πυλών στο Scratch

Αθροιστές. Ημιαθροιστής

4.1 Θεωρητική εισαγωγή

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

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

Ψηφιακή Σχεδίαση Εργαστηριο 1. Τμήμα: Μηχανικών Πληροφορικής κ Τηλεπικοινωνιών Διδάσκων: Δρ. Σωτήριος Κοντογιαννης Μάθημα 2 ου εξαμήνου

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

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

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

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

Άσκηση 3 (ανακοινώθηκε στις 24 Απριλίου 2017, προθεσμία παράδοσης: 2 Ιουνίου 2017, 12 τα μεσάνυχτα).

Ψηφιακή Λογική και Σχεδίαση

Ψηφιακά Κυκλώματα (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

100 ΕΡΩΤΗΣΕΙΣ ΜΕ ΤΙΣ ΑΝΤΙΣΤΟΙΧΕΣ ΑΠΑΝΤΗΣΕΙΣ ΓΙΑ ΤΟ ΜΑΘΗΜΑ ΨΗΦΙΑΚΑ ΚΥΚΛΩΜΑΤΑ

Εισαγωγή στους Υπολογιστές

a -j a 5 a 4 a 3 a 2 a 1 a 0, a -1 a -2 a -3

Πράξεις με δυαδικούς αριθμούς

Τμήμα Χρηματοοικονομικής & Ελεγκτικής ΤΕΙ Ηπείρου Παράρτημα Πρέβεζας. Πληροφορική Ι. Μάθημα 4 ο Πράξεις με bits. Δρ.

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

Στοιχεία Προγραμματισμού Σε Γραφικό Περιβάλλον Φύλλο εργασίας 1 ο

w x y Υλοποίηση της F(w,x,y,z) με πολυπλέκτη 8-σε-1

Λύσεις Ασκήσεων ΣΕΙΡΑ 1 η. Πρόσημο και μέγεθος

Αντικείμενα 4 ου εργαστηρίου

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

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

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

ΘΕ16: Αναζήτηση δυαδική αναζήτηση

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

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

turnin Lab2.hs

KANONIKH ΕΞΕΤΑΣΗ ΦΕΒΡΟΥΑΡΙΟΣ 1999

9. OIΚΟΥΜΕΝΙΚΕΣ ΠΥΛΕΣ ΠΟΛΛΑΠΛΩΝ ΕΙΣΟ ΩΝ

3. Να γραφεί πρόγραμμα που θα διαβάζει 100 ακεραίους αριθμούς από το πληκτρολόγιο και θα υπολογίζει το άθροισμά τους.

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

ΗΜΥ 100 Εισαγωγή στην Τεχνολογία

10-δικό δικό

Ασκήσεις μελέτης της 16 ης διάλεξης

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

ΕΠΛ131 Αρχές Προγραμματισμού Ι

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

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

Λογική Σχεδίαση Ψηφιακών Συστημάτων

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ Η/Υ (ΟΜΑΔΑ ΘΕΜΑΤΩΝ A)

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 3

ΟΝΟΜΑΤΕΠΩΝΥΜΟ : Αντικείμενα: περιγραφική στατιστική, γραφήματα, συναρτήσεις βάσεων δεδομένων, συγκεντρωτικοί πίνακες

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

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

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

Ελίνα Μακρή

Ψηφιακά Συστήματα. 6. Σχεδίαση Συνδυαστικών Κυκλωμάτων

1 η Θεµατική Ενότητα : Αριθµητικά Κυκλώµατα. Επιµέλεια διαφανειών: Χρ. Καβουσιανός

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

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

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

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα

Εισαγωγή στην επιστήμη των υπολογιστών. Πράξεις με μπιτ

ΚΕΦΑΛΑΙΟ 6: Αναδρομή

Εισαγωγή στους Υπολογιστές

7. ΥΑ ΙΚΗ ΠΡΟΣΘΕΣΗ ΚΑΙ ΑΦΑΙΡΕΣΗ

Τμήμα Διοίκησης Τεχνολογίας. Εξάμηνο Β' Φύλλο Ασκήσεων 2 ΔΟΜΕΣ ΕΠΙΛΟΓΗΣ Διδάσκοντες: Στέλιος Ξυνόγαλος, Θεόδωρος Κασκάλης

Open Office Calc. Ακαδημαϊκό έτος εαρινό εξάμηνο ΟΝΟΜΑΤΕΠΩΝΥΜΟ : ΑΡΙΘΜΟΣ ΜΗΤΡΩΟΥ:

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

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

ΠΡΟΓΡΑΜΜΑ ΣΠΟΥ ΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ

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


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

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 2

ΣΧΕΔΙΑΣΗ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

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

Ενότητα 9 ΑΡΙΘΜΗΤΙΚΑ & ΛΟΓΙΚΑ ΚΥΚΛΩΜΑΤΑ

ΠΛΗ10 Κεφάλαιο 2. ΠΛH10 Εισαγωγή στην Πληροφορική: Τόμος Α Κεφάλαιο: : Αριθμητική περιοχή της ALU 2.5: Κυκλώματα Υπολογιστών

ΑΣΚΗΣΗ 11: ΕΠΕΞΕΡΓΑΣΙΑ ΦΥΣΙΚΗΣ ΓΛΩΣΣΑΣ - ΣΥΝΤΑΚΤΙΚΗ ΑΝΑΛΥΣΗ (PARSING)

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Πληροφορική Ι. Ενότητα 4 : Πράξεις με bits. Δρ. Γκόγκος Χρήστος

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

ΘΕΜΑΤΑ & ΕΝΔΕΙΚΤΙΚΕΣ ΛΥΣΕΙΣ

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

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

Η κανονική μορφή της συνάρτησης που υλοποιείται με τον προηγούμενο πίνακα αληθείας σε μορφή ελαχιστόρων είναι η Q = [A].

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

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 1

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

Εισαγωγή στους Αλγορίθμους

Αντικείμενα 6 ου εργαστηρίου

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

Εισαγωγή στην Πληροφορική

Transcript:

Σχολή Τεχνολογικών Εφαρμογών (ΣΤΕΦ) Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Διδάσκων: Γκόγκος Χρήστος Μάθημα: Τεχνητή Νοημοσύνη (εργαστήριο Δ εξαμήνου) Ακαδημαϊκό έτος 2016-2017 εαρινό εξάμηνο Ασκήσεις Prolog Άσκηση 1 Δίνεται η ακόλουθη βάση γνώσης: likes(john,mary). likes(john,trains). likes(peter,fast_cars). likes(person1,person2):- hobby(person1,hobby), hobby(person2,hobby). hobby(john,trainspotting). hobby(tim,sailing). hobby(helen,trainspotting). hobby(simon,sailing). A. Τι αποτελέσματα θα εμφανίσουν τα ακόλουθα ερωτήματα; 1.?- likes(trains,john). 2.?- likes(helen,john). 3.?- likes(tim,helen). 4.?- likes(john,x). Β. Σχεδιάστε το δένδρο αναζήτησης για την ερώτηση likes(john,x). Γ. Προσθέστε τον κανόνα ότι αν κάποιος έχει χόμπι το trainspotting τότε του αρέσουν τα τρένα. Άσκηση 2 Δίνεται η ακόλουθη βάση γνώσης: hold_party(x):- birthday(x), happy(x). birthday(tom). birthday(fred). birthday(helen). happy(mary). happy(jane). happy(helen). A. Τι αποτελέσματα θα εμφανίσουν τα ακόλουθα ερωτήματα; 1.?- birthday(jane). 2.?- hold_party(x). Β. Σχεδιάστε το δένδρο αναζήτησης για την ερώτηση hold_party(x). Γ. Προσθέστε τον κανόνα ότι αν κάποιος έχει γενέθλια τότε είναι χαρούμενος. Τι θα εμφανίσει τώρα το ακόλουθο ερώτημα;?- hold_party(x). 1

Άσκηση 3 Δίνεται η ακόλουθη βάση γνώσης: woman(helen). woman(maria). woman(sofia). loves(nikos, helen). % ο Νίκος αγαπά την Ελένη loves(panos, helen). loves(petros, viki). loves(viki, petros). jealous(x,y):- loves(x,z), loves(y,z). A. Πόσα είναι τα γεγονότα, πόσοι είναι οι κανόνες, πόσες είναι οι προτάσεις, πόσα και ποια είναι τα κατηγορήματα και πόσες είναι οι μεταβλητές που χρησιμοποιούνται στη βάση γνώσης; Περιγράψτε λεκτικά την τελευταία πρόταση της βάσης γνώσης. Β. Τι αποτελέσματα θα εμφανίσουν τα ακόλουθα ερωτήματα; 1.?- woman(x). 2.?- loves(panos,x), woman(x). 3.?- loves(petros,x), woman(x). 4.?- jealous(panos,x). Γ. Προσθέστε τον απαραίτητο κώδικα έτσι ώστε όταν θα γίνεται η ερώτηση woman_loved(x) να εμφανίζει όλα τα ονόματα γυναικών που κάποιος τις αγαπά. Δ. Σχεδιάστε το δένδρο αναζήτησης για την ερώτηση jealous(panos,x). Άσκηση 4 Δίνεται η ακόλουθη βάση γνώσης bigger(elephant, horse). bigger(horse, donkey). bigger(donkey, dog). bigger(dog, monkey). is_bigger(x,y):-bigger(x,y). is_bigger(x,y):-bigger(x,z), is_bigger(z,y). Α. Τι αποτελέσματα θα εμφανίσουν τα ακόλουθα ερωτήματα;?- is_bigger(elephant, monkey).?- is_bigger(x,donkey). Β. Διατυπώστε το ερώτημα: «Ποια είναι τα ζώα Χ που είναι μεγαλύτερα από monkey και μικρότερα από donkey;». Τι θα επιστρέψει το ερώτημα αυτό; Γ. Σχεδιάστε το δένδρο αναζήτησης για την ερώτηση is_bigger(donkey,υ). Άσκηση 5 A. Με βάση το ακόλουθο σχήμα που δείχνει σε ένα υποθετικό κοινωνικό δίκτυο τις περιπτώσεις που ένα άτομο ακολουθεί ένα άλλο άτομο (π.χ. ο Πέτρος την Σοφία) καταγράψτε τη βάση γνώσης που ορίζει τα κατάλληλα γεγονότα και κανόνες που ζητούνται. 2

1. Ορίστε τα κατηγορήματα male/1 και female/1 που καθορίζουν το φύλο καθενός που συμμετέχει στο κοινωνικό δίκτυο. 2. Ορίστε το κατηγόρημα follows/2 για όλες τις περιπτώσεις που κάποιο άτομο ακολουθεί κάποιο άλλο άτομο. 3. Ορίστε το κατηγόρημα friends/2 που ορίζει ότι δύο άτομα είναι φίλοι αν ισχύει και για τους δύο ότι ο ένας ακολουθεί τον άλλο. 4. Ορίστε τα κατηγορήματα male_friends/2 και female_friends/2 που εντοπίζουν όλους τους άντρες φίλους και όλες τις γυναίκες φίλες ενός ατόμου αντίστοιχα. 5. Ορίστε το κατηγόρημα friend_same_gender/2 που εντοπίζει όλους τους φίλους που είναι του ίδιου φύλου. 6. Ορίστε το κατηγόρημα recommend_common_friends(χ,υ) που εντοπίζει κάθε Υ που είναι φίλος ενός φίλου του Χ (χωρίς να εμφανίζει και το ίδιο το Χ). B. Εισάγετε τις ακόλουθες ερωτήσεις και καταγράψτε τα αποτελέσματα: 1. Να βρεθούν όλα τα άτομα που ακολουθούν την Σοφία. 2. Να βρεθούν όλες οι γυναίκες που ακολουθούν την Σοφία. 3. Να βρεθούν όλα τα ζεύγη φίλων. 4. Να βρεθούν οι άνδρες φίλοι του Πέτρου. 5. Να βρεθούν όλα τα ζεύγη ατόμων που είναι φίλοι και είναι του ίδιο φύλου. 6. Να βρεθούν για τον Ηλία οι προτάσεις νέων φίλων σύμφωνα με το κατηγόρημα recommend_common_friends/2. Άσκηση 6 Σχεδιάστε το δένδρο αναζήτησης για το ερώτημα male_friends(petros,a) στην ακόλουθη βάση γνώσης. friends(x,y):- follows(x,y), follows(y,x). male_friends(x,y):- friends(x,y), male(y). follows(ilias, petros). follows(petros,ilias). follows(petros, demos). follows(demos,petros). follows(petros,sofia). male(ilias). male(demos).?- male_friends(petros,a). 3

Άσκηση 7 Σχεδιάστε το δένδρο αναζήτησης για το ερώτημα descend(anna,donna) στην ακόλουθη βάση γνώσης. child(anna,bridget). child(bridget,caroline). child(caroline,donna). child(donna,emily). descend(x,y):-child(x,y). descend(x,y):-child(x,z), descend(z,y).?- descend(anna,donna). Άσκηση 8 Α. Να υλοποιηθεί ένα πρόγραμμα Prolog το οποίο να προσομοιώνει έναν ημιαθροιστή όπως απεικονίζεται στο ακόλουθο σχήμα Χ Υ XOR AND 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 Ημιαθροιστής 1. Υλοποιήστε τα κατηγορήματα and_gate/3, xor_gate/3 και half_adder/4. 2. Υποβάλετε το ερώτημα half_adder(x,y,c,s) και καταγράψτε τα αποτελέσματα. 3. Υποβάλετε το ερώτημα half_adder(x,y,c,s), format('x=~w Y=~w C=~w S=~w ~n', [X,Y,C,S]), fail. Καταγράψτε και εξηγήστε το αποτέλεσμα που λαμβάνετε. Β. Επεκτείνατε το προηγούμενο πρόγραμμα έτσι ώστε να προσομοιώνει έναν πλήρη αθροιστή όπως απεικονίζεται στο ακόλουθο σχήμα. Χ Υ OR 0 0 0 0 1 1 1 0 1 1 1 1 Αθροιστής 1. Υλοποιήστε τα κατηγορήματα or_gate/3 και full_adder/5. 2. Υποβάλετε το ερώτημα full_adder(0,x,y,c,s) και καταγράψτε τα αποτελέσματα. 3. Υποβάλετε το ερώτημα full_adder(1,x,y,c,s) και καταγράψτε τα αποτελέσματα. 4

Γ. Επεκτείνατε το πρόγραμμα έτσι ώστε να προσομοιώνει έναν αθροιστή 3 ψηφίων όπως απεικονίζεται στο ακόλουθο σχήμα (προσθέτει τους δυαδικούς αριθμούς Α 2 Α 1 Α 0 και Β 2 Β 1 Β 0 έχοντας ως κρατούμενο το C 0 ). Για παράδειγμα η πρόσθεση των αριθμών 101 και 110 με κρατούμενο 1 αντιστοιχεί σε Α 2 =1, Α 1 =0, Α 0 =1, Β 2 =1, Β 1 =1, Β 0 =0 και C 0 =1 και θα δώσει ως αποτέλεσμα τον δυαδικό αριθμό 1100 δηλαδή C 3 =1,S 2 =1,S 1 =0,S 0 =0. Αθροιστής δυαδικών αριθμών με 3 ψηφία 1. Υλοποιήστε το κατηγόρημα adder_3_digits(c0,a2,a1,a0, B2,B1,B0,C3,S2,S1,S0). 2. Εισάγετε το ερώτημα που πραγματοποιεί την άθροιση των δυαδικών αριθμών 011 και 001 με κρατούμενο 0. 3. Εισάγετε το ερώτημα που πραγματοποιεί την άθροιση των δυαδικών αριθμών 111 και 111 με κρατούμενο 1. Άσκηση 9 Γράψτε το κατηγόρημα factorial/2 το οποίο υπολογίζει το παραγοντικό (n!=1*2*3* *n) ενός ακεραίου αριθμού. Άσκηση 10 Γράψτε τα κατηγορήματα sum/2 και prod/2 που υπολογίζουν το άθροισμα και το γινόμενο των στοιχείων μιας λίστας. Πηγές 1. Τεχνικές Λογικού Προγραμματισμού Η Γλώσσα Prolog, Σακελλαρίου Ηλίας, Βασιλειάδης Νικόλαος, Κεφαλάς Πέτρος, Σταμάτης Δημοσθένης. Ελληνικά Ακαδημαϊκά Συγγράμματα και Βοηθήματα, 2015. 2. Learn Prolog Now http://www.learnprolognow.org 5

Απαντήσεις Άσκηση 1 Ερώτημα Α?- likes(trains,john).?- likes(helen,john). true.?- likes(tim,helen).?- likes(john,x). X = mary ; X = trains ; X = john ; X = helen. Ερώτημα B?- trace.?- likes(john, X). Ερώτημα Γ likes(x,trains) :- hobby(x,trainspotting). Άσκηση 2 Ερώτημα Α?- birthday(jane).?- hold_party(x). X = helen Ερώτημα Β 6

Ερώτημα Γ happy(x) :- birthday(x). Άσκηση 3 Ερώτημα Α γεγονότα: 8 κανόνες: 1 προτάσεις: 9 κατηγορήματα: 3 (woman/1, loves/2, jealous/3) μεταβλητές: 2 (Χ,Υ) Αν ο Χ και ο Υ αγαπούν κάποιον Ζ τότε ο Χ ζηλεύει τον Υ Ερώτημα Β?- woman(x). X = helen ; X = maria ; X = sofia.?- loves(panos,x), woman(x). X = helen.?- loves(petros,x), woman(x).?- jealous(panos,x). X = nikos ; X = panos. Ερώτημα Γ woman_loved(y) :- loves(_,y), woman(y). X = helen ; X = helen ; Ερώτημα Δ 7

Άσκηση 4 Ερώτημα A?- is_bigger(elephant, monkey). true.?- is_bigger(x,donkey). X = horse ; X = elephant ; Ερώτημα B?- is_bigger(x,monkey), is_bigger(donkey,x). X = dog ; Ερώτημα Γ 8

Άσκηση5 Α. %% ΕΡΩΤΗΜΑ 1 male(petros). male(ilias). male(demos). male(nikos). female(sofia). female(helen). female(katerina). %% ΕΡΩΤΗΜΑ 2 follows(ilias, petros). follows(petros,ilias). follows(petros, demos). follows(petros,sofia). follows(nikos, petros). follows(nikos, ilias). follows(demos, sofia). follows(demos,petros). follows(ilias,katerina). follows(katerina,petros). follows(sofia,helen). follows(helen,sofia). 9

%% ΕΡΩΤΗΜΑ 3 friends(x,y):- follows(x,y), follows(y,x). %% ΕΡΩΤΗΜΑ 4 male_friends(x,y):- friends(x,y), male(y). female_friends(x,y):- friends(x,y), female(y). %% ΕΡΩΤΗΜΑ 5 friends_same_gender(x,y):- female(x), friends(x,y), female(y). friends_same_gender(x,y):- male(x), friends(x,y), male(y). %% ΕΡΩΤΗΜΑ 6 recommend_common_friends(x,y):- friends(x,z), friends(z,y), X \= Y. Β. Β1 Β2 Β3 Β4?- follows(x,sofia). X = petros ; X = demos ; X = helen.?- male(x), follows(x,sofia). X = petros ; X = demos ;?- friends(x,y). X = ilias, Y = petros ; X = petros, Y = ilias ; X = petros, Y = demos ; X = demos, Y = petros ; X = sofia, Y = helen ; X = helen, Y = sofia.?- male_friends(x,petros). X = ilias ; 10

Β5 Β6 X = demos ;?- friends_same_gender(x,y). X = sofia, Y = helen ; X = helen, Y = sofia ; X = petros, Y = ilias ; X = petros, Y = demos ; X = ilias, Y = petros ; X = demos, Y = petros ;?- recommend_common_friends(ilias, Y). Y = demos ; Άσκηση 6 11

Άσκηση 7 Άσκηση 8 Α1, Β1, Γ1 %% ΕΡΩΤΗΜΑ Α and_gate(0,0,0). and_gate(0,1,0). and_gate(1,0,0). and_gate(1,1,1). xor_gate(0,0,0). xor_gate(0,1,1). xor_gate(1,0,1). xor_gate(1,1,0). half_adder(x,y,carry,sum) :- and_gate(x,y, Carry), xor_gate(x,y,sum). get_and_gate :- and_gate(x,y,z), format('~w AND ~w = ~w ~n', [X,Y,Z]). %% ΕΡΩΤΗΜΑ Β or_gate(0,0,0). or_gate(0,1,1). or_gate(1,0,1). or_gate(1,1,1). full_adder(carry,xi,yi,nextcarry,si) :- half_adder(xi,yi,c,s), half_adder(carry, S, C2, Si), 12

or_gate(c2,c, NextCarry). %% ΕΡΩΤΗΜΑ Γ adder_3_digits(c0,a2,a1,a0, B2,B1,B0,C3,S2,S1,S0):- full_adder(c0,a0,b0,c1,s0), full_adder(c1,a1,b1,c2,s1), full_adder(c2,a2,b2,c3,s2). Α2 Α3 Β2 Β3 Γ2 Γ3?- half_adder(x,y,c,s). X = Y, Y = C, C = S, S = 0 ; X = C, C = 0, Y = S, S = 1 ; X = S, S = 1, Y = C, C = 0 ; X = Y, Y = C, C = 1, S = 0.?- half_adder(x,y,c,s), format('x=~w Y=~w C=~w S=~w ~n', [X,Y,C,S]), fail. X=0 Y=0 C=0 S=0 X=0 Y=1 C=0 S=1 X=1 Y=0 C=0 S=1 X=1 Y=1 C=1 S=0?- full_adder(0,x,y,c,s). X = Y, Y = C, C = S, S = 0 ; X = C, C = 0, Y = S, S = 1 ; X = S, S = 1, Y = C, C = 0 ; X = Y, Y = C, C = 1, S = 0 ;?- full_adder(1,x,y,c,s). X = Y, Y = C, C = 0, S = 1 ; X = S, S = 0, Y = C, C = 1 ; X = C, C = 1, Y = S, S = 0 ; X = Y, Y = C, C = S, S = 1 ; adder_3_digits(0,0,1,1,0,0,1,c3,s2,s1,s0), format('~w~w~w~w',[c3,s2,s1,s0]), fail. 0100 adder_3_digits(1,1,1,1,1,1,1,c3,s2,s1,s0), format('~w~w~w~w',[c3,s2,s1,s0]), fail. 1111 Άσκηση 9 factorial(0,1). factorial(n,f) :- N>0, % για να αποφευχθούν κλήσεις με αρνητικό Ν N1 is N-1, 13

factorial(n1,f1), F is F1*N. Άσκηση 10 sum([],0). sum([h T],S) :- sum(t,s1), S is S1+H. prod([],1). prod([h T],P):- prod(t,p1), P is P1*H. 14