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

Σχετικά έγγραφα
ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

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

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

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


ΑΛΓΕΒΡΙΚΗ ΕΠΙΛΥΣΗ ΣΥΣΤΗΜΑΤΩΝ

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

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

2.2.3 Η εντολή Εκτύπωσε

Κεφάλαιο 5ο: Εντολές Επανάληψης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

Β. Να εξηγήσετε τι σηµαίνει ολίσθηση ενός δυαδικού αριθµού 3 θέσεις αριστερά µπορεί να είναι: Α: ουρά Β:στοίβα Γ:και τα δυο :τίποτα

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

Να γράψετε τους αριθμούς 1, 2, 3 από τη Στήλη Α και δίπλα το γράμμα α, β, γ, δ, ε από τη Στήλη Β που δίνει τη σωστή αντιστοιχία.

Spare Parts. Cartridges. Chipbreakers Wrenches / Spanners Springs / Washers / Plugs / Nuts / Punches

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

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

ΔΟΜΗ ΕΠΙΛΟΓΗΣ. Οι διάφορες εκδοχές της

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

ΠΡΟΒΛΗΜΑ Έστω ότι θέλουµε να αναπτύξουµε ένα πρόγραµµα για να παίζουµε το παιχνίδι «βρες τον αριθµό που σκέφτηκα» σύµφωνα µε τους εξής κανόνες:

Ενότητα 4 ΛΟΓΙΚΕΣ ΣΥΝΑΡΤΗΣΕΙΣ ΛΟΓΙΚΑ ΚΥΚΛΩΜΑΤΑ ΔΥΟ ΕΠΙΠΕΔΩΝ

Οι πράξεις που χρειάζονται για την επίλυση αυτών των προβληµάτων (αφού είναι απλές) µπορούν να τεθούν σε µια σειρά και πάρουν µια αλγοριθµική µορφή.

Spare Parts P2~P6. Screws. Cartridges Clamp Sets Clamps Chipbreakers Wrenches Wrenches / Springs / Nuts / Punches / Others P13~P14 P15 P17~P18

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

δήλωσης δεδοµένων και σε παραβίαση των συντακτικών κανόνων της γλωσσάς.

Γ ε ν ι κ ό Λ ύ κ ε ι ο Ε λ ε υ θ ε ρ ο ύ π ο λ η ς. Α λ γ ό ρ ι θ μ ο ι

Μάθηµα 1. Κεφάλαιο 1o: Συστήµατα. γ R παριστάνει ευθεία και καλείται γραµµική εξίσωση µε δύο αγνώστους.

Λίστες στο Scratch 2.0.

Άσκηση 1. Ποια από τα κάτω αλφαριθμητικά είναι αποδεκτά ως ονόματα μεταβλητών σε έναν αλγόριθμο i. Τιμή

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

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

ιαχείριση Πληροφοριών στο ιαδίκτυο

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

ΕΙΣΑΓΩΓΗ ΣΤΗ ΒΕΛΤΙΣΤΟΠΟΙΗΣΗ ΣΥΣΤΗΜΑΤΩΝ

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 2 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

ΠΡΟΤΕΙΝΟΜΕΝΟ ΔΙΑΓΩΝΙΣΜΑ ΑΕΠΠ. (Α) Να απαντήσετε στη παρακάτω ερώτηση : Τι είναι ένα υποπρόγραμμα; Τι γνωρίζετε για τα χαρακτηριστικά του; (10 Μονάδες)

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

Η Δομή Επανάληψης. Εισαγωγή στην δομή επανάληψης Χρονική διάρκεια: 3 διδακτικές ώρες

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

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

Σημειωματάριο Τετάρτης 18 Οκτ. 2017

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

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

Γ. Β Α Λ Α Τ Σ Ο Σ. 4ο ΓΥΜΝΑΣΙΟ ΛΑΜΙΑΣ 1. Γιώργος Βαλατσός Φυσικός Msc

KΕΦΑΛΑΙΟ 8 ΑΡΙΘΜΗΤΙΚΕΣ ΜΕΘΟ ΟΙ ΕΠΙΛΥΣΗΣ ΣΥΝΗΘΩΝ. Το τυπικό πρόβληµα αρχικών τιµών που θα µας απασχολήσει, είναι το ακόλουθο:

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

Ασκήσεις για το µάθηµα Λογική για Υπολογιστές. 2ο σετ ασκήσεων

ΚΕΦΑΛΑΙΟ 2. Η κοινή ρίζα των εξισώσεων αυτών είναι μ =. Επομένως το Ρ(χ) είναι

Γραπτές Απολυτήριες Εξετάσεις Ιουνίου 2008 ΘΕΜΑΤΑ. ΘΕΜΑ 1 ο Σημειώστε δίπλα σε κάθε φράση (Σ) αν είναι σωστή ή (Λ) αν είναι λάθος.

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

6.1 Η ΕΝΝΟΙΑ ΤΗΣ ΣΥΝΑΡΤΗΣΗΣ

Παραδείγματα (1 ο σετ) Διανυσματικοί Χώροι

Cuckoo Hashing. Αλγόριθμοι και Πολυπλοκότητα. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

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

4. Ποιος είναι ο τύπος και ποια η τιμή της μεταβλητής που χρησιμοποιείται παρακάτω;

ΠΑΡΑ ΕΙΓΜΑΤΑ ΣΤΗ ΓΛΩΣΣΑ PROLOG ΠΑΡΑ ΕΙΓΜΑ 1

! #! # # # % &! ( ) +

Επαναληπτικές Διαδικασίες

Πολυώνυμα. Κώστας Γλυκός ΜΑΘΗΜΑΤΙΚΟΣ. Άλγεβρα Κεφάλαιο ασκήσεις. εκδόσεις. Καλό πήξιμο. Ι δ ι α ί τ ε ρ α μ α θ ή μ α τ α 2 0 / 7 /

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

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

HY118-Διακριτά Μαθηματικά

ΘΕΜΑ Α. Λύση: 1. Σωστό, 2. Σωστό, 3. Λάθος, 4. Λάθος, 5. Λάθος

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

ΜΑΘΗΜΑΤΙΚΑ Γ ΓΥΜΝΑΣΙΟΥ

Δραστηριότητα Περίπτωσης. Τίτλος: Οι διαφορές της απλής, της σύνθετης και της εμφωλευμένης δομής επιλογής

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

Γραµµική Άλγεβρα. Εισαγωγικά. Μέθοδος Απαλοιφής του Gauss

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 1 ΛΥΣΕΙΣ Ανάλυση Πολυπλοκότητας

Γ. ίνεται το παρακάτω πρόγραµµα και υποπρογράµµατα: ΠΡΟΓΡΑΜΜΑ Κύριο ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: Α, Β, Γ ΑΡΧΗ ΙΑΒΑΣΕ Α, Β, Γ ΚΑΛΕΣΕ ιαδ1(α, Β, Γ)

Δομές Δεδομένων. Τι είναι η δομή δεδομένων; Έστω η ακολουθία αριθμών: 8, 10,17,19,22,5,12 Λογικό Επίπεδο. Φυσικό Επίπεδο RAM. Ταξινομημένος.

LCs 2 + RCs + 1. s 1,2 = RC ± R 2 C 2 4LC 2LC. (s 2)(s 3) = A. = 4 s 3 s=2 s + 2 B = (s 2)(s 3) (s 3) s=3. = s + 2. x(t) = 4e 2t u(t) + 5e 3t u(t) (2)

1 η Θεµατική Ενότητα : Δυαδικά Συστήµατα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 1 ΛΥΣΕΙΣ Ανάλυση Πολυπλοκότητας

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

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

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

HY118- ιακριτά Μαθηµατικά. Νόµοι ισοδυναµίας. Κατηγορηµατικός Λογισµός. ιακριτά Μαθηµατικά, Εαρινό εξάµηνο Παρασκευή, 24/02/2017

Παραδείγματα Διανυσματικοί Χώροι

Δυναμική Διατήρηση Γραμμικής Διάταξης

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

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

I. ΑΛΓΟΡΙΘΜΟΣ II. ΠΡΑΞΕΙΣ - ΣΥΝΑΡΤΗΣΕΙΣ III. ΕΠΑΝΑΛΗΨΕΙΣ. 1. Τα πιο συνηθισμένα σενάρια παραβίασης αλγοριθμικών κριτηρίων είναι:

Υπολογιστικά Φύλλα Microsoft Excel 2016 Level I

(x) = δ(x) π(x) + υ(x)

ΕΙΣΑΓΩΓΗ ΣΤΗ ΒΕΛΤΙΣΤΟΠΟΙΗΣΗ ΣΥΣΤΗΜΑΤΩΝ

Εισαγωγή στις Αρχές της επιστήμης των ΗΥ

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

ΦΥΣ 145 Μαθηµατικές Μέθοδοι στη Φυσική. Πρόοδος 28 Μαρτίου 2009 Οµάδα 1 η

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

επιστρέφει αριθµό που προκύπτει µε αντιστροφή των στοιχείων του πρώτου

ΕΝΔΕΙΚΤΙΚΕΣ ΑΠΑΝΤΗΣΕΙΣ ΔΙΑΓΩΝΙΣΜΑΤΟΣ ΑΝΑΠΤΥΞΗΣ ΕΦΑΡΜΟΓΩΝ ΣΤΙΣ 01/03/2015 ΘΕΜΑ Α

2. ΑΡΙΘΜΗΤΙΚΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. 2.1 Αριθμητικά συστήματα

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

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

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

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

Παράδειγμα 8. Να βρείτε την τιμή της παράστασης:

Transcript:

Κεφάλαιο 1 Άσκηση 1.1 πολύτιµο_µέταλλο(χρυσάφι). αρέσει(γιώργος, ποδόσφαιρο). πρωτεύουσα(αθήνα, ελλάδα). χώρα(ελλάδα). χάρισε(µαρία,γιώργος,βιβλίο). αρέσουν(εκδροµές,χ). Άσκηση 1.2?πολύτιµο_µέταλλο(ασήµι).?πρωτεύουσα(Χ,ελλάδα).?χώρα(αφρική).?χάρισε(Χ,Υ,Ζ).?αρέσουν(εκδροµές,νίκος). Άσκηση 1.3?αγαπά(Χ,Χ).?αγαπά(Χ,Υ), αγαπά(υ,χ).?αγαπά(χ,ζ), αγαπά(υ,ζ).... Άσκηση 1.4 αγαπά(χ,χ). αγαπά(α,γ):-αγαπά(α,β), αγαπά(β,γ). αγαπά(χ,υ):-αγαπά(υ,χ). αγαπά(χ,υ):-αγαπά(χ,ζ), αγαπά(υ,ζ). Άσκηση 1.5 είναι_µητέρα(χ):-µητέρα(χ,υ). είναι_πατέρας(χ):-είναι_πατέρας(χ,υ). είναι_αδελφή(χ,υ):-γονιός(ζ,χ), γονιός(ζ,υ), γυναίκα(χ). είναι_αδελφός(χ,υ):-γονιός(ζ,χ), γονιός(ζ,υ), άνδρας(χ). είναι_παππούς(χ,υ):-πατέρας(χ,ζ), γονιός(ζ,υ). είναι_θείος(χ,υ):-είναι_αδελφός(χ,ζ), γονιός(ζ,υ). είναι_θείος(χ,υ):-είναι_αδελφή(χ,ζ), γονιός(ζ,υ). Άσκηση 1.6 πλήρες_γεύµα(ορεκτικό(µαρούλι), κύριο_πιάτο(σούπα), φρούτο(µήλο)). Άσκηση 1.7 Στο προηγούµενο πρόγραµµα προσθέτουµε τα γεγονότα: φρούτο_εποχής(καρπούζι). φρούτο_εποχής(σταφύλι). οπότε θα υποβάλουµε σύνθετες ερωτήσεις που θα διασφαλίζουν ότι το φρούτο του γεύµατος θα είναι εποχής. Άσκηση 1.8 γνωστός(ονοµατ(όνοµα(νίκος), επίθετο(νικολάου)), τηλέφωνο(234567)). γνωστός(ονοµατ(όνοµα(γιώργος), επίθετο(γεωργίου)), τηλέφωνο(456789)). γνωστός(ονοµατ(όνοµα(βασίλης), επίθετο(βασιλείου)), τηλέφωνο(345567)). Άσκηση 1.9 πόλη(α). πόλη(β). πόλη(γ). πόλη( ). πόλη(ε). πόλη(z). δρόµος(α,β). δρόµος(β,ε). δρόµος(β,ζ). δρόµος(γ, ). δρόµος(,α). δρόµος(ε,ζ). δρόµος(ζ,γ). Άσκηση 1.10 Το κατηγόρηµα «δρόµος» θα είχε ένα ακόµη όρισµα (θα ήταν δηλαδή κατηγόρηµα 3ης τάξης), και το επιπλέον όρισµα θα δήλωνε το µήκος του δρόµου. Για παράδειγµα: δρόµος(α,β,15). πλήρες_γεύµα(ορεκτικό(ντοµάτα), κύριο_πιάτο(κρέας), φρούτο(σταφύλι)). πλήρες_γεύµα(ορεκτικό(λάχανο), κύριο_πιάτο(ψάρι), φρούτο(καρπούζι)). - 1 -

Κεφάλαιο 2 Άσκηση 2.1 Θα πάρουµε την απάντηση Χ=φ(φ(φ(φ(φ(φ(φ(...))))))) Ο µηχανισµός ταυτοποίησης αρχικά θέτει Χ=Υ και στη συνέχεια θέτει φ(χ)=υ, όµως αφού Υ=Χ, προκύπτει φ(χ)=χ. Επιχειρείται δηλαδή µια µεταβλητή να εξισωθεί µε έναν σύνθετο όρο, ο οποίος όµως περιέχει την µεταβλητή. Αυτό έχει σαν αποτέλεσµα ο µηχανισµός ταυτοποίησης της Prolog να µπει σε έναν ατέρµονο βρόγχο, όπου από την σχέση Χ=φ(Χ), προσπαθεί να απαλείψει από το δεύτερο µέλος το Χ, αντικαθιστώντας το κάθε φορά µε φ(χ)... Άσκηση 2.2 Η ερώτηση που πρέπει να υποβάλουµε είναι η εξής:?- είναι_φίλος(μ1,μ2), διδάσκεται(αριθµητική,τάξη(τ)), µαθητής(μ1, τάξη(τ)). και θα µας επιστρέψει στην µεταβλητή Μ1 τους µαθητές που διδάσκονται αριθµητική και σττην µεταβλητή Μ2 τους φίλους τους. Τµήµα του δένδρου υπολογισµού φαίνεται στην επόµενη σελίδα. Από όλο το δένδρο υπολογισµού έχει σχεδιασθεί το αριστερότερο τµήµα του και παρουσιάζονται οι πρώτες 6 από τις 15 συνολικά λύσεις που βρίσκει η Prolog. Το σύνολο των λύσεων µε τη σειρά που τις βρίσκει η Prolog είναι το εξής: Μ1=γιώργος, Μ2=γιώργος, Τ=τάξη(2). Μ1=σοφία, Μ2=σοφία, Τ=τάξη(5). Μ1=σοφία, Μ2=νίκος, Τ=τάξη(5). Μ1=νίκος, Μ2=σοφία, Τ=τάξη(5). Μ1=νίκος, Μ2=νίκος, Τ=τάξη(1). Μ1=µαρία, Μ2=µαρία, Τ=τάξη(2). Μ1=µαρία, Μ2=γιώργος, Τ=τάξη(2). Μ1=µαρία, Μ2=σοφία, Τ=τάξη(2). Μ1=γιώργος, Μ2=µαρία, Τ=τάξη(2). Μ1=γιώργος, Μ2=γιώργος, Τ=τάξη(2). Μ1=γιώργος, Μ2=σοφία, Τ=τάξη(2). Μ1=σοφία, Μ2=µαρία, Τ=τάξη(5). Μ1=σοφία, Μ2=γιώργος, Τ=τάξη(5). Μ1=σοφία, Μ2=σοφία, Τ=τάξη(5). - 2 -

? είναι_φίλος(μ1,μ2), διδάσκεται(αριθµητική, Τ), µαθητής(μ1,τ).?αρέσει(γλώσσα, Μ2), διδάσκεται(αριθµητική,τ), µαθητής(γιώργος,τ). (14), Μαθ=γλώσσα, Μ1=γιώργος?αρέσει(αριθµητική, Μ2), διδάσκεται(αριθµητική,τ), µαθητής(σοφία,τ).?αρέσει(μαθ,μ1), αρέσει(μαθ, Μ2), διδάσκεται(αριθµητική,τ), µαθητής(μ1,τ). (15), Μαθ=αριθµητική, Μ1=σοφία (16), Μαθ=αριθµητική, Μ1=νίκος?αρέσει(αριθµητική, Μ2), διδάσκεται(αριθµητική,τ), µαθητής(νίκος,τ). (17), Μαθ=µουσική, Μ1=Χ?διδάσκεται (µουσική, τάξη(τ1)), µαθητής(μ1, τάξη(τ1)), αρέσει(µουσική, Μ2), διδάσκεται(αριθµητική,τ), µαθητής(μ1,τ). (14), Μ2=γιώργος?διδάσκεται(αριθµητική,Τ ), µαθητής(γιώργος,τ). (15), Μ2=σοφία?διδάσκεται(αριθµητική, Τ), µαθητής(σοφία,τ). (16), Μ2=νίκος?διδάσκεται(αριθµητική, Τ), µαθητής(σοφία,τ). (15), Μ2=σοφία?διδάσκεται(αριθµητική, Τ), µαθητής(νίκος,τ). (16), Μ2=νίκος?διδάσκεται(αριθµητική, Τ), µαθητής(νίκος,τ). (12), Τ1=2?µαθητής(Μ1, τάξη(2)), αρέσει(µουσική, Μ2), διδάσκεται(αριθµητική,τ), µαθητής(μ1,τ). (7), T=τάξη(1) (7), T=τάξη(1) (7), T=τάξη(1) (7), T=τάξη(1) (7), T=τάξη(1) (3), Μ1=µαρία?µαθητής(γιώργος,τάξη(1)?µαθητής(σοφία,τάξη(1)?µαθητής(σοφία,τάξη(1)?µαθητής(νίκος,τάξη(1)) ΝΑΙ?µαθητής(νίκος,τάξη(1)) ΝΑΙ?αρέσει(µουσική, Μ2), διδάσκεται(αριθµητική,τ),µαθητής(µαρία,τ). (8), T=τάξη(2) (8), T=τάξη(2) (8), T=τάξη(2) (8), T=τάξη(2) (8), T=τάξη(2) (17)?µαθητής(γιώργος,τάξη(2) ΝΑΙ?µαθητής(σοφία,τάξη(2)?µαθητής(σοφία,τάξη(2)?µαθητής(νίκος,τάξη(2))?µαθητής(νίκος,τάξη(2))?διδάσκεται(µουσική,τάξη(Τ2)),µαθητής(Μ2, τάξη(τ2)),διδάσκεται(αριθµητική,τ), µαθητής(µαρία,τ). (9), T=τάξη(5) (9), T=τάξη(5) (9), T=τάξη(5) (9), T=τάξη(5) (9), T=τάξη(5) (12) Τ2=2?µαθητής(γιώργος,τάξη(5)?µαθητής(σοφία,τάξη(5) ΝΑΙ?µαθητής(σοφία,τάξη(5) ΝΑΙ?µαθητής(νίκος,τάξη(5))?µαθητής(νίκος,τάξη(5))?µαθητής(Μ2,τάξη(2)),διδάσκεται(αριθµητικ ή,τ), µαθητής(µαρία,τ). (3) Μ2=µαρία?διδάσκεται(αριθµητική,Τ), µαθητής(µαρία,τ). - 3 - (7) Τ=τάξη(1)?µαθητής(µαρία,τάξη(1)). (8) Τ=τάξη(5)?µαθητής(µαρία,τάξη(5)). (8) Τ=τάξη(2)?µαθητής(µαρία,τάξη(2)). ΝΑΙ

Κεφάλαιο 3 Άσκηση 3.1 αρχικό_τµήµα([],λ). αρχικό_τµήµα([σ Λ1],[Σ Λ2]):-αρχικό_τµήµα(Λ1,Λ2). ή αλλιώς αρχικό_τµήµα(λ1,λ):-παράθεση(λ1,λ2,λ). Άσκηση 3.2 τελικό_τµήµα(λ,λ). τελικό_τµήµα(λ1,[χ Λ2]):-τελικό_τµήµα(Λ1,Λ2). Άσκηση 3.3 τελευταίο(χ,λ):-παράθεση(λ1,χ,λ). Άσκηση 3.4 υπολίστα([],λ). υπολίστα([],λ,0). υπολίστα([χ Λ1],[Χ Λ2]):-υπολίστα(Λ1,Λ2,0). υπολίστα(λ1,[χ Λ2]):-υπολίστα(Λ1,Λ2). υπολίστα([χ Λ1],[Χ Λ2],0):-υπολίστα(Λ1,Λ2,0). Προσοχή: η συγκεκριµένη σειρά των κατηγορηµάτων και των κανόνων οδηγεί στην πιο γρήγορη εύρεση αποτελέσµατος. ή αλλιώς υπολίστα(l1,l):-αρχικό_τµήµα(l1,l2), παράθεση(l3,l2,l). Άσκηση 3.5 διπλά([χ],[χ,χ]). διπλά([χ S1],[Χ,Χ S2]):-διπλά(S1,S2). Άσκηση 3.6 push(x,s,[x S]). pop(x,[x S]). Άσκηση 3.7 συµµετρική([x]). συµµετρική([x,χ]). συµµετρική(s):- παράθεση([χ S1],[X],S), συµµετρική(s1). Άσκηση 3.8 κιβώτια(χ,υ,ζ,[x S1],[Y S2],[Z S3]). κιβώτια(x,y,z,[a1 S1],[A2 S2],[A3 S3]):- κιβώτια(x,y,z,s1,s2,s3). - 4 -

Άσκηση 3.9 ανάστροφος_πίνακα(λ1,λ2):-ανάστροφος_πίνακα(λ1,λ2,[]). ανάστροφος_πίνακα([[η11 Τ11] Τ1],[[Η21 Τ21] Τ2],Λ3):- Η11=Η21, ανάστροφος_πίνακα([τ11 Τ1],Τ2,[Τ2 Λ3]). ανάστροφος_πίνακα([[] Τ1],[],Λ3):- ανάστροφη(λ3,αλ3), ανάστροφος_πίνακας(τ1,αλ3,[]). ανάστροφος_πίνακας([[]],[],_). Άσκηση 3.10 ίδιο_πλήθος([χ],[υ]). ίδιο_πλήθος([χ S1], [Y S2]):-ίδιο_πλήθος(S1,S2). Άσκηση 3.11 τοποθέτησε_στο_τέλος([σ],[],λ). τοποθέτησε_στο_τέλος([σ],[σ1 Λ1],[Σ2 Λ2]):-τοποθέτησε_στο_τέλος([Σ],Λ1,Λ2). Άσκηση 3.12 µοίρασε([],[],[]) µοίρασε([χ],[χ],[]). µοίρασε([χ,υ],[χ],[υ]). µοίρασε([χ,υ S1],[X S2],[Y S3]):-µοίρασε(S1,S2,S3). Άσκηση 3.13 ίδια_στοιχεία([]). ίδια_στοιχεία([χ]). ίδια_στοιχεία([χ,χ S]):-ίδια_στοιχεία(S). Άσκηση 3.14 επανάληψη(s,[]). επανάληψη(s,s). επανάληψη(s1,s2):-παράθεση(s1, S,S2), επανάληψη(s1,s). - 5 -

Κεφάλαιο 4 Άσκηση 4.1 τιµή_αληθείας(nand(x,y),1):-τιµή_αληθείας(not(and(x,y)),1). τιµή_αληθείας(nand(x,y),0):-τιµή_αληθείας(not(and(x,y)),0). τιµή_αληθείας(nor(x,y),1):-τιµή_αληθείας(not(or(x,y)),1). τιµή_αληθείας(nor(x,y),0):-τιµή_αληθείας(not(or(x,y)),0). Άσκηση 4.2 Θα χρησιµοποιήσω τον σύνθετο όρο σ(f,g) για να δηλώσω την σύνθετη συνάρτηση F(G(x)). παράγωγος(σ(f,g), X, *(σ(df,g), DG)):- παράγωγος(f, X, DF), παράγωγος(g, X, DF). Άσκηση 4.3 παραγοντικό(0,ε(0)). παραγοντικό(ε(χ),υ):- παραγοντικό(χ,υ1), γινόµενο(ε(χ), Υ1, Υ). Άσκηση 4.4 δύναµη(χ, 0, ε(0)):-είναι_φυσικός(χ). δύναµη(χ, ε(υ), Ζ):- δύναµη(χ, Υ, Ζ1), γινόµενο(χ, Ζ1, Ζ). Άσκηση 4.5 είναι_περιττός(ε(0)). είναι_περιττός(ε(ε(χ))):-είναι_περιττός(χ). Άσκηση 4.6 είναι_άρτιος(0). είναι_άρτιος(ε(ε(χ))):-είναι_άρτιος(χ). - 6 -

Κεφάλαιο 5 Άσκηση 5.1 τύπωσε_λίστα(λ):-τύπωσε_λίστα(λ,''). τύπωσε_λίστα(λ,α):- γράψε(α), γράψε('['), νέα_γραµµή, συνένωσε(α,' ',Β), τύπωσε_λίστα0(λ,β), γράψε(α), γράψε(']'), νέα_γραµµή. τύπωσε_λίστα0([],_). τύπωσε_λίστα0([[σ1 Λ1] Λ0],Α):- τύπωσε_λίστα([σ1 Λ1],Α), τύπωσε_λίστα0([λ0,α). τύπωσε_λίστα0([σ Λ1],Α):- γράψε(α), γράψε(σ), νέα_γραµµή, τύπωσε_λίστα0(λ1,α). Άσκηση 5.2 τύπωσε_λίστα(λ):-τύπωσε_λίστα(λ,''). τάξη(a). τάξη(b). τάξη(c). τάξη(d). επόµενη_τάξη(τάξη(a),τάξη(b)). επόµενη_τάξη(τάξη(b),τάξη(c)). επόµενη_τάξη(τάξη(c),τάξη(d)). τελευταία_τάξη(τάξη(d)). πρόγραµµα(τάξη(a),µάθηµα('maths '),καθηγητής('γεωργίου '),1,αίθουσα('αίθουσα_a ')). πρόγραµµα(τάξη(b),µάθηµα('physic '),καθηγητής('ιωάννου '),1,αίθουσα('αίθουσα_b ')). πρόγραµµα(τάξη(c),µάθηµα('computer '),καθηγητής(' ηµητρίου '),1,αίθουσα('αίθουσα_d ')). πρόγραµµα(τάξη(d),µάθηµα('chemie '),καθηγητής('νικολάου '),1,αίθουσα('αίθουσα_c ')). πρόγραµµα(τάξη(a),µάθηµα('chemie '),καθηγητής('νικολάου '),2,αίθουσα('αίθουσα_a ')). πρόγραµµα(τάξη(b),µάθηµα('maths '),καθηγητής('γεωργίου '),2,αίθουσα('αίθουσα_c ')). πρόγραµµα(τάξη(c),µάθηµα('computer '),καθηγητής(' ηµητρίου '),2,αίθουσα('αίθουσα_b ')). πρόγραµµα(τάξη(d),µάθηµα('physic '),καθηγητής('ιωάννου '),2,αίθουσα('αίθουσα_d ')). πρόγραµµα(τάξη(a),µάθηµα('physic '),καθηγητής('ιωάννου '),3,αίθουσα('αίθουσα_b ')). πρόγραµµα(τάξη(b),µάθηµα('computer '),καθηγητής(' ηµητρίου '),3,αίθουσα('αίθουσα_c ')). πρόγραµµα(τάξη(c),µάθηµα('chemie '),καθηγητής('νικολάου '),3,αίθουσα('αίθουσα_a ')). πρόγραµµα(τάξη(d),µάθηµα('maths '),καθηγητής('γεωργίου '),3,αίθουσα('αίθουσα_d ')). τύπωσε_πρόγραµµα:- νέα_γραµµή,νέα_γραµµή, γράψε('τάξηes: '),τύπωσε_τάξηes(τάξη(a)),νέα_γραµµή, γράψε(' ----------------------------------------------------------'),νέα_γραµµή, τύπωσε_πρόγραµµα0(1,τάξη(a)). τύπωσε_πρόγραµµα0(ώρα,τάξη):- γράψε(' '),τύπωσε_καθηγητήςs(ώρα,τάξη),νέα_γραµµή, γράψε('ώρα: '),γράψε(ώρα),γράψε(' '), τύπωσε_µάθηµαs(ώρα,τάξη),νέα_γραµµή, γράψε(' '),τύπωσε_αίθουσαs(ώρα,τάξη),νέα_γραµµή,νέα_γραµµή, αύξησε(ώρα,ώρα0),τύπωσε_πρόγραµµα0(ώρα0,τάξη). - 7 -

τύπωσε_τάξηes(τάξη):- Τάξη=τάξη(Τάξη0),γράψε(Τάξη0),γράψε(' επόµενη_τάξη(τάξη,επόµενη_τάξη), τύπωσε_τάξηes(επόµενη_τάξη). '), τύπωσε_τάξηes(τάξη):- τελευταία_τάξη(τάξη). τύπωσε_καθηγητήςs(ώρα,τάξη):- πρόγραµµα(τάξη,µάθηµα(μάθηµα),καθηγητής(καθηγητής),ώρα,αίθουσα(αίθουσα)), γράψε(καθηγητής),γράψε(' '), επόµενη_τάξη(τάξη,επόµενη_τάξη), τύπωσε_καθηγητήςs(ώρα,επόµενη_τάξη). τύπωσε_καθηγητήςs(_,τάξη):- τελευταία_τάξη(τάξη). τύπωσε_µάθηµαs(ώρα,τάξη):- πρόγραµµα(τάξη,µάθηµα(μάθηµα),καθηγητής(καθηγητής),ώρα,αίθουσα(αίθουσα)), γράψε(μάθηµα),γράψε(' '), επόµενη_τάξη(τάξη,επόµενη_τάξη), τύπωσε_µάθηµαs(ώρα,επόµενη_τάξη). τύπωσε_µάθηµαs(_,τάξη):- τελευταία_τάξη(τάξη). τύπωσε_αίθουσαs(ώρα,τάξη):- πρόγραµµα(τάξη,µάθηµα(μάθηµα),καθηγητής(καθηγητής),ώρα,αίθουσα(αίθουσα)), γράψε(αίθουσα),γράψε(' '), επόµενη_τάξη(τάξη,επόµενη_τάξη), τύπωσε_αίθουσαs(ώρα,επόµενη_τάξη). τύπωσε_αίθουσαs(_,τάξη):- τελευταία_τάξη(τάξη). Άσκηση 5.3 αντέγραψε(χ,υ):- δες(χ), πες(υ), εκτέλεσε_αντιγραφή, δες, πες. εκτέλεσε_αντιγραφή:- πάρε(χ), τοποθέτησε(χ), εκτέλεσε_αντιγραφή. εκτέλεσε_αντιγραφή. Άσκηση 5.4 µετέτρεψε(x,y):- όνοµα(x,lx), µετατροπή(lx,ly), όνοµα(y,ly). µετατροπή([],[]). - 8 -

HX>=152, HX=<175, HY is HX-24, HX=224, HY is 240, HX=225, HY is 234, HX=226, HY is 235, HX=227, HY is 236, HX=228, HY is 136, HX=229, HY is 237, HX=230, HY is 238, HX=231, HY is 239, HX=232, HY is 147, HX=233, HY is 240, Άσκηση 5.5 µετέτρεψε(x,y):- ονοµα(x,lx), µετατροπή(lx,ly), ονοµα(y,ly). µετατροπή([],[]). µετατροπή([151 LX],[142 LY]):- µετατροπή(lx,ly). µετατροπή([134 LX],[136 LY]):- - 9 -

µετατροπή(lx,ly). µετατροπή([147 LX],[136 LY]):- µετατροπή(lx,ly). µετατροπή([132,136 LX],[136 LY]):- µετατροπή(lx,ly). µετατροπή([142,136 LX],[136 LY]):- µετατροπή(lx,ly). µετατροπή([147,136 LX],[136 LY]):- µετατροπή(lx,ly). µετατροπή([128,136 LX],[132 LY]):- µετατροπή(lx,ly). µετατροπή([x LX],[X LY]):-µετατροπή(LX,LY). Άσκηση 5.6 διέγραψε(x,y,z):- όνοµα(x,lx),όνοµα(y,ly), εκτέλεσε_διαγραφή(lx,ly,lz), όνοµα(z,lz). εκτέλεσε_διαγραφή([],_,[]). εκτέλεσε_διαγραφή([h1 TX],[H1 TY],LZ):- εκτέλεσε2_διαγραφή(tx,ty,[h1 TY],LZ). εκτέλεσε_διαγραφή([h1 TX],[H2 TY],[H1 LZ]):- εκτέλεσε_διαγραφή(tx,[h2 TY],LZ). εκτέλεσε2_διαγραφή(lx,[],ly,lz):- εκτέλεσε_διαγραφή(lx,ly,lz). εκτέλεσε2_διαγραφή([h1 TX],[H1 TY],LY,LZ):- εκτέλεσε2_διαγραφή(tx,ty,ly,lz). εκτέλεσε2_διαγραφή(tx,ty,ly,lz):- εκτέλεσε_διαγραφή(tx,ly,lz). - 10 -

Κεφάλαιο 7 Άσκηση 7.1 δύναµη(x,y,z):-δύναµη0(x,y,z,0,1). δύναµη0(_,y,z,y,z). δύναµη0(x,y,z,a,b):- άθροισµα(a,1,a1), γινόµενο(b,x,b1), δύναµη0(x,y,z,a1,b1). Άσκηση 7.2 είναι_χώρα(ελλάδα,133000000,11000000). πυκνότητα_πληθυσµού(x,y):- είναι_χώρα(x,a,b), Y is B/A. Άσκηση 7.3 διαίρεσε_λίστα(l,0,[],l). διαίρεσε_λίστα([h T1],N,[H T2],L):- N1 is N - 1, διαίρεσε_λίστα(t1,n1,t2,l). Άσκηση 7.4 εκτύπωσε_λίστα(l):- προχώρα(l,1). προχώρα([],_). προχώρα([h T],N):- γράψε('item: '), γράψε(n), γράψε(' '), γράψε(h), νέα_γραµµή, N1 is N+1, προχώρα(t,n1). Άσκηση 7.5 διανυσµατικό_άθροισµα([],[],[]). διανυσµατικό_άθροισµα([h1 T1],[H2 T2],[H T]):- H is H1+H2, διανυσµατικό_άθροισµα(t1,t2,t). Άσκηση 7.6 γινόµενο_λίστας(l,x):-γινόµενο_λίστας0(l,x,1). γινόµενο_λίστας0([],x,x). γινόµενο_λίστας0([h T],X,N):- N1 is N * H, γινόµενο_λίστας0(t,x,n1). Άσκηση 7.7 πρόσθεσε_πίνακες([[]],[[]],[[]]). πρόσθεσε_πίνακες([[] T1],[[] T2],[[] T]):- πρόσθεσε_πίνακες(t1,t2,t). πρόσθεσε_πίνακες([[h11 T11] T1],[[H22 T22] T2],[[H0 T0] T]):- H0 is H11+H22, πρόσθεσε_πίνακες([t11 T1],[T22 T2],[T0 T]). πολλαπλασίασε_πίνακες(a1,a2,a3):- ανέστρεψε_πίνακα(α2,τα2), µέτρησε(a1,la1), µέτρησε(τa2,la2), πολλαπλασίασε_πίνακες(a1,τa2,a3,1,1,la1,la2). πολλαπλασίασε_πίνακες(a1,a2,[[h0 T0] T],X,Y,LA1,LA2):- πάρε_γράµµη(a1,x,a1x), - 11 -

πάρε_γράµµη(a2,y,a2y), υπολόγισε(a1x,a2y,h0), επόµενο_στοιχείο(a1,a2,[t0 T],X,Y,LA1,LA2). επόµενο_στοιχείο(a1,a2,[[h0 T0] T],X,Y,LA1,LA2):- X<LA1, X1 is X+1, πολλαπλασίασε_πίνακες(a1,a2,[[h0 T0] T],X1,Y,LA1,LA2). επόµενο_στοιχείο(a1,a2,[[] T],X,Y,LA1,LA2):- X=LA1, Y<LA2, Y1 is Y+1, X1 = 1, πολλαπλασίασε_πίνακες(a1,a2,t,x1,y1,la1,la2). επόµενο_στοιχείο(a1,a2,[[] []],X,Y,LA1,LA2):- X=LA1, Y=LA2. πάρε_γράµµη([l T0],1,L). πάρε_γράµµη([_ T0],X,AX):- X > 1, X1 is X-1, πάρε_γράµµη(t0,x1,ax). υπολόγισε(a1x,a2y,h0):- υπολόγισε(a1x,a2y,h0,0). υπολόγισε([],[],h0,h0). υπολόγισε([h1 T1],[H2 T2],H0,X):- X1 is X+(H1*H2), υπολόγισε(t1,t2,h0,x1). µέτρησε(a,l):- µέτρησε(a,l,0). µέτρησε([],l,l). µέτρησε([h T],L,X):- X1 is X+1, µέτρησε(t,l,x1). - 12 -

Κεφάλαιο 9 Άσκηση 9.1 διαφορά(l1,l2,l):- διαφορά(l1,l2,l,[]). διαφορά([],_,l,l). διαφορά([h1 T1],L2,L,X):- όχι(περιέχεται(h1,l2)), X1=[H1 X], διαφορά(t1,l2,l,x1). διαφορά([h1 T1],L2,L,X):- περιέχεται(h1,l2), διαφορά(t1,l2,l,x). περιέχεται(h,[]):- αποτυχία. περιέχεται(h,[h T]). περιέχεται(h0,[h T]):- περιέχεται(h0,t). Άσκηση 9.2 διαίρεσε([],[],[]). διαίρεσε([h T],[H T1],L2):- H>=0, διαίρεσε(t,t1,l2). διαίρεσε([h T],L1,[H T2]):- H<0, διαίρεσε(t,l1,t2). Άσκηση 9.3?π(Χ). Χ=α, Υ=β?π(Χ), π(υ). Χ=α, Υ=α Χ=α, Υ=β Χ=β, Υ=α Χ=β, Υ=β? π(χ), π(υ),!. Χ=α, Υ=α?π(Χ), π(υ). Χ=α, Υ=α. - 13 -

Χ=α, Υ=β. Άσκηση 9.4 switch_case(x,[x T1],[H2 T2],ELSE):- T2. switch_case(x,[h1 T1],[H2 T2],ELSE):- switch_case(x,t1,t2,else). switch_case(_,[],[],else):- ELSE. Άσκηση 9.5 Ναι, επιτρέπει. Μπορούµε να θέσουµε ερωτήσεις της µορφής: if_then_else(c,if_then_else(c1,a1,b1),if_then_else(c2,a2,b2)). οπότε ανάλογα µε το αν ισχύουν οι συνθήκες c, c1 και c2, θα εκτελεσθεί µια από τις «εντολές» a1, a2, b1 ή b2. Άσκηση 9.6 απαλοιφή(_,[],[]):-!. απαλοιφή(s,[h T1],[H T2]):- S=\=H, απαλοιφή(s,t1,t2). απαλοιφή(s,[s T1],[H T2]):- απαλοιφή(s,t1,[h T2]). Άσκηση 9.7 διαγραφή(_,[],[]). διαγραφή(s,[h T1],[H T2]):- S=\=H, διαγραφή(s,t1,t2). διαγραφή(s,[s T1],T1). Άσκηση 9.8 αντικατάσταση(_,_,[],[]). αντικατάσταση(x,y,[x T1],[Y T2]):- αντικατάσταση(x,y,t1,t2). αντικατάσταση(x,y,[h T1],[H T2]):- X=\=H, αντικατάσταση(x,y,t1,t2). - 14 -

Κεφάλαιο 10 Άσκηση 10.1 έλεγχος_όρου(x):- X=..[H L], έλεγχος_ορισµάτων(l). έλεγχος_ορισµάτων([]). έλεγχος_ορισµάτων([h T]):- όχι_µεταβλητή(h), έλεγχος_ορισµάτων(t). Άσκηση 10.2 επίπεδη_λίστα([],[]). επίπεδη_λίστα([h T1],[H T2]):- not(είναι_λίστα(h)), επίπεδη_λίστα(t1,t2). επίπεδη_λίστα([[] T],L2):- επίπεδη_λίστα(t,l2). επίπεδη_λίστα([[h1 T1] T],L2):- επίπεδη_λίστα([h1,t1 T],L2). είναι_λίστα([_ _]). είναι_λίστα([]). Άσκηση 10.3 υποόρος(x,x):-!. υποόρος(term1,term2):- TERM2=..L2, ψάξε_όρο(term1,l2). ψάξε_όρο(term1,[term1 _]):-!. ψάξε_όρο(term1,[h2 T2]):- συναρτησιακό_σύµβολο(h2,_,a), A>0, H2=..L, ψάξε_όρο(term1,l). ψάξε_όρο(term1,[h2 T2]):- ψάξε_όρο(term1,t2). Άσκηση 10.4 αντικατέστησε(y1,y2,o1,o2):- O1=..L1, αντικατάσταση(y1,y2,l1,l2), - 15 -

O2=..L2. αντικατάσταση(_,_,[],[]). αντικατάσταση(x,y,[x T1],[Y T2]):- αντικατάσταση(x,y,t1,t2). αντικατάσταση(x,y,[h1 T1],[H1 T2]):- σταθερά(h1), αντικατάσταση(x,y,t1,t2). αντικατάσταση(x,y,[h1 T1],[O2 L2]):- αντικατέστησε(x,y,h1,o2), αντικατάσταση(x,y,t1,l2). Άσκηση 10.5 απλοποίησε(l1,l2):- αφαίρεσε_ακεραίους(l1,[prefix,sum L3],L4), αφαίρεσε_όρους(l4,l3), L2=[PREFIX,SUM L3]. αφαίρεσε_όρους([],[]). αφαίρεσε_όρους([prefix,term TAIL],L3):- απλοποίησε_όρο([prefix,term TAIL],TERM,0,SUM0,TAIL0), SUM0=\=0, βρες_πρόσηµο(proshmo,syntel,sum0), L3=[PROSHMO,SYNTEL,*,TERM L30], αφαίρεσε_όρους(tail0,l30). αφαίρεσε_όρους([prefix,term TAIL],L3):- απλοποίησε_όρο([prefix,term TAIL],TERM,0,SUM0,TAIL0), αφαίρεσε_όρους(tail0,l3). αφαίρεσε_όρους([prefix,term TAIL],L3):- αφαίρεσε_όρους(tail,l3). απλοποίησε_όρο([],term,sum,sum,[]). απλοποίησε_όρο([+,term TAIL],TERM,SUM,SUM0,TAIL0):- SUM1 is SUM+1, απλοποίησε_όρο(tail,term,sum1,sum0,tail0). απλοποίησε_όρο([-,term TAIL],TERM,SUM,SUM0,TAIL0):- SUM1 is SUM-1, απλοποίησε_όρο(tail,term,sum1,sum0,tail0). απλοποίησε_όρο([prefix,term0 TAIL],TERM,SUM,SUM0,[PREFIX,TERM0 TAIL0]):- not(term0=term), - 16 -

απλοποίησε_όρο(tail,term,sum,sum0,tail0). αφαίρεσε_ακεραίους(l1,[prefix,sum _],L4):- πρόσθεσε_ακεραίους(l1,0,sum2,l4), SUM2=\=0, βρες_πρόσηµο(prefix,sum,sum2). αφαίρεσε_ακεραίους(l1,_,l1):- πρόσθεσε_ακεραίους(l1,0,sum2,_), SUM2=0. βρες_πρόσηµο(prefix,sum,sum2):- SUM2>0, SUM=SUM2, PREFIX='+'. βρες_πρόσηµο(prefix,sum,sum2):- SUM2<0, SUM is -SUM2, PREFIX='-'. πρόσθεσε_ακεραίους([+,h T],S,SUM,L4):- integer(h), S0 is S+H, πρόσθεσε_ακεραίους(t,s0,sum,l4). πρόσθεσε_ακεραίους([prefix,h T],S,SUM,[PREFIX,H L4]):- not(integer(h)), πρόσθεσε_ακεραίους(t,s,sum,l4). πρόσθεσε_ακεραίους([-,h T],S,SUM,L4):- integer(h), S0 is S-H, πρόσθεσε_ακεραίους(t,s0,sum,l4). πρόσθεσε_ακεραίους([],sum,sum,[]). Άσκηση 10.6 όρος(n,o,on):- O=..[H TAIL], πάρε_όνοµα(tail,n,on). πάρε_όνοµα([on _],1,ON). πάρε_όνοµα([_ TAIL],N,ON):- N>0, N1 is N-1, πάρε_όνοµα(tail,n1,on). συναρτησιακό_σύµβολο(o,ss,t):- O=..[SS TAIL], µέτρα(tail,0,t). µέτρα([],n,n). - 17 -

µέτρα([h T],N,N0):- N1 is N+1, µέτρα(t,n1,n0). Άσκηση 10.7 έχει_ιδιότητα([],_). έχει_ιδιότητα([h T],K):- O=..[K,H], O, έχει_ιδιότητα(t,k). - 18 -

Κεφάλαιο 11 Άσκηση 11.1 αντέγραψε(όρος1,όρος2):- ενσωµάτωσε_α(βοηθητικός_όρος(όρος1)), διέγραψε(βοηθητικός_όρος(όρος2)). Άσκηση 11.2 σύνολο_από(x,k,l):- βρες_λύσεις(x,k), φτιάξε_λίστα(x,l). βρες_λύσεις(x,k):- K, ενσωµάτωσε_α(λύση(x)), αποτυχία. βρες_λύσεις(_,_). φτιάξε_λίστα(x,[x T]):- διέγραψε(λύση(x)), διέγραψε_διπλές(x), φτιάξε_λίστα(x1,t). φτιάξε_λίστα(_,[]). διέγραψε_διπλές(x):- διέγραψε(λύση(x)), διέγραψε_διπλές(x). διέγραψε_διπλές(_). - 19 -

Κεφάλαιο 12 Άσκηση 12.1 Αν θέσουµε την ερώτηση: τελευταίο(1,[1,2,3,χ]). τότε η Prolog θα µας απαντήσει καταφατικά, δίνοντας στην µεταβλητή Χ την τιµή 1. Αν θέσουµε την ερώτηση: τελαυταίο(1,χ). τότε η Prolog θα µας απαντήσει επίσης καταφατικά, δίνοντας µας µια απειρία από λύσεις, όλες τις λίστες που έχουν τελευταίο στοιχείο το 1, αρχίζοντας από την λίστα µε ένα µόνο στοιχείο: Χ=[1] Χ=[Χ1,1] Χ=[Χ2,Χ1,1] Χ=[Χ3,Χ2,Χ1,1]... Αν αλλάξουµε την σειρά των δυο εντολών του προγράµµατος, τότε η τελευταία ερώτηση θα κάνει την Prolog να πέσει σε ατέρµονη ανακύκλωση, χωρίς να µας δώσει καµία λύση. - 20 -

Κεφάλαιο 13 Άσκηση 13.1 διαφορά_συνόλων([],b,[]). διαφορά_συνόλων([x TA],B,[X T]):- όχι(µέλος(x,b)), διαφορά_συνόλων(ta,b,t). διαφορά_συνόλων([x TA],B,T):- µέλος(x,b), διαφορά_συνόλων(ta,b,t). µέλος(x,[x L]):-!. µέλος(x,[_ L]):- µέλος(x,l). Άσκηση 13.2-21 -