#1η Προαιρετική Εργασία
#### ΠΑΝΟΣ ΠΕΤΡΙΔΙΣΟΓΛΟΥ Π16115
#### 5ο ΕΞΑΜΗΝΟ
#### ΛΟΓΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
## ΚΩΔΙΚΑΣ
```
family(person(tom,fox,date(7,5,1950),works(bbc,15200)),
person(ann,fox,date(9,5,1951),unemployed),
[person(pet,fox,date(5,5,1973),unemployed),
person(jim,fox,date(5,5,1973),unemployed)]).
family(person(tasos,melas,date(2,7,1945),works(ikea,14000)),
person(stavroula,kodopoulou,date(3,10,1945),works(mcdonalds,6000)),
[person(andonis,melas,date(1,7,1983),works(techsupport,7000))]).
salary(D,Sal):-
family(D,_,_),
D=person(_,_,_,works(_,S)),
S<Sal.
salary(Z,Sal):-
family(_,Z,_),
Z=person(_,_,_,works(_,S)),
S<Sal.
dateofbirth(D,Year):-
family(D,_,_),
D=person(_,_,date(_,_,Y),_),
Year>Y.
dateofbirth(Z,Year):-
family(_,Z,_),
Z=person(_,_,date(_,_,Y),_),
Year>Y.
exists(X):-
salary(X,8000),dateofbirth(X,1950).
```
## ΤΕΚΜΗΡΙΩΣΗ
* Χαρακτηριστικά<break>
Το δεδομένο family χαρακτηρίζεται απ 3 ορίσματα ,Πατέρας, Μητέρα και μια λίστα για τα παιδιά , ανάλογα πόσα έχει η κάθε οικογένεια.
Κάθε ένα person χαρακτηρίζεται από 4 ορίσματα , Ονομα , Επιθετο , Ημ/νια γέννησης και την εργασία του , αν δουλεύει αναφέρεται που εργάζεται και τον μισθό του, αλλιώς αναγράφεται unemployed αν είναι άνεργος.
* Κατηγορήματα<break>
Κατασκευάστηκαν 3 κατηγορήματα .<break>
Το διμερές Salary(D,Sal):
Με δυο κανόνες ένα για τον πατέρα και ένα για την μητέρα , όπου ελέγχει αν ένα person έχει εισόδημα μικρότερο από το Sal<break>
Το διμερές dateofbirth(D,Year):
Με δυο κανόνες ένα για τον πατέρα και ένα για την μητέρα , όπου ελέγχει αν ένα person έχει γεννηθεί πριν από τον χρόνο Year<break>
Το μονομερές exists(X):
οπου αξιοποιεί τα δυο παραπάνω κατηγορήματα για να βρει τον πατέρα ή την μητέρα που έχει εισόδημα μικρότερο από 8000 και έχει γεννηθεί πριν από το 1950
## ΕΚΤΕΛΕΣΗ ΚΩΔΙΚΑ
```
?- salary(D,8000).
D = person(stavroula, kodopoulou, date(3,10,1945), works(mcdonalds, 6000));
false.
```
```
?- dateofbirth(D,1950).
D = person(tasos, melas, date(2, 7, 1945), works(ikea, 14000)) ;
D = person(stavroula, kodopoulou, date(3, 10, 1945), works(mcdonalds, 6000)) ;
false.
```
```
?-exists(X).
D = person(stavroula, kodopoulou, date(3, 10, 1945), works(mcdonalds, 6000)) ;
false.
```