# Αρχές Γλωσσών Προγραμματισμού (εργαστήριο 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 το οποίο να προσομοιώνει έναν ημιαθροιστή όπως απεικονίζεται στο
ακόλουθο σχήμα:

| X | Y | Sum | Carry |
|---|---|-----|-------|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
Β. Επεκτείνατε το παραπάνω ερώτημα έτσι ώστε να υλοποιήσετε έναν πλήρη αθροιστή (δείτε το σχήμα που ακολουθεί)

| 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
* Πάντα, κάνετε ερωτήσεις στο κάτω μέρος του εγγράφου, ακριβώς πάνω από εδώ
:::