---
# System prepended metadata

title: Αρχές Γλωσσών Προγραμματισμού (εργαστήριο 7)

---

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