# Αρχές Γλωσσών Προγραμματισμού (εργαστήριο 7) ### 22/4/2021 :::danger Η συγκεκριμένη σελίδα μπορεί να χρησιμοποιηθεί για ερωτήσεις στην ώρα του μαθήματος. ::: ## Περιεχόμενο μαθήματος Λογικός Προγραμματισμός - Εισαγωγή στην **Prolog** Εγκαταστήστε την [SWI-Prolog](https://www.swi-prolog.org/Download.html). Εναλλακτικά μπορεί να χρησιμοποιηθεί ο [online διερμηνευτής της SWI-Prolog](https://swish.swi-prolog.org/). ## Πρόγραμμα μαθήματος | Ώρα | Θέμα | | --- | ---- | |10:10-10:20| Όροι (terms), μεταβλητές, σταθερές (ακέραιοι, πραγματικοί, άτομα), σύνθετοι όροι (λίστες, δομές), ταυτοποίηση (unification) | |10:20-10:30| Γεγονότα (facts) και κατηγορήματα (predicates) | |10:30-10:40| Ο διερμηνέας της Prolog (swipl), φόρτωση βάσης γνώσης, ερωτήματα | |10:40-10:50| Σύζευξη όρων, λήψη πολλαπλών λύσεων | |10:50-11:00| Κανόνες | |11:00-11:10| Διάλειμμα | |11:10-11:20| [Άσκηση 1](#Άσκηση-1) | |11:20-11:30| Αναδρομικοί κανόνες | |11:30-11:40| Λίστες, κεφαλή και ουρά λίστας, ενσωματωμένα κατηγορήματα για λίστες (π.χ. member/2, append/3, length/2), ανώνυμες μεταβλητές | |11:40-12:00| [Άσκηση 2](#Άσκηση-2) | ### Άσκηση 1 Α. Να υλοποιηθεί ένα πρόγραμμα Prolog το οποίο να προσομοιώνει έναν ημιαθροιστή όπως απεικονίζεται στο ακόλουθο σχήμα: ![](https://github.com/chgogos/dituoi_agp/blob/main/resources/half_adder.png?raw=true) | X | Y | Sum | Carry | |---|---|-----|-------| | 0 | 0 | 0 | 0 | | 0 | 1 | 1 | 0 | | 1 | 0 | 1 | 0 | | 1 | 1 | 0 | 1 | Β. Επεκτείνατε το παραπάνω ερώτημα έτσι ώστε να υλοποιήσετε έναν πλήρη αθροιστή (δείτε το σχήμα που ακολουθεί) ![](https://github.com/chgogos/dituoi_agp/blob/main/resources/full_adder.png?raw=true) | Xi | Yi | Carry | Si | NextCarry | |----|----|-------|----|-----------| | 0 | 0 | 0 | 0 | 0 | | 0 | 0 | 1 | 1 | 0 | | 0 | 1 | 0 | 1 | 0 | | 0 | 1 | 1 | 0 | 1 | | 1 | 0 | 0 | 1 | 0 | | 1 | 0 | 1 | 0 | 1 | | 1 | 1 | 0 | 0 | 1 | | 1 | 1 | 1 | 1 | 1 | ### Άσκηση 2 Εξασκηθείτε στην Prolog εκτελώντας τα παραδείγματα κώδικα που βρίσκονται στο [Learn X in Y minutes Where X=prolog](https://learnxinyminutes.com/docs/prolog/). Μπορείτε να χρησιμοποιήστε ως περιβάλλον εκτέλεσης το online περιβάλλον [SWISH](https://swish.swi-prolog.org/) --- :::info * Πάντα, κάνετε ερωτήσεις στο κάτω μέρος του εγγράφου, ακριβώς πάνω από εδώ :::