n true false if t then t else t u t t b t emptylist cons t t t t λx.t u ::= head tail isempty

Σχετικά έγγραφα
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ

Συναρτησιακός Προγραμματισμός 2008 Λύσεις στο Δεύτερο Φύλλο Ασκήσεων

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Αντικειμενοστρεφής Προγραμματισμός -Python. Κ.Π. Γιαλούρης

Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Σύνοψη Προηγούµενου. Γλώσσες χωρίς Συµφραζόµενα (2) Ισοδυναµία CFG και PDA. Σε αυτό το µάθηµα. Αυτόµατα Στοίβας Pushdown Automata

Κεφάλαιο 3 Η Σημασιολογία των Γλωσσών Προγραμματισμού

for for for for( . */

ΗΜΥ 100 Εισαγωγή στην Τεχνολογία

Φροντιστήριο 6 Λύσεις

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Τυπικές χρήσεις της Matlab

Αλγόριθµοι και Πολυπλοκότητα

if(συνθήκη) {... // οµάδα εντολών } C: Από τη Θεωρία στην Εφαρµογή 5 ο Κεφάλαιο

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

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

Αφαίρεση στον FP. Πολυμορφισμός Συναρτήσεις υψηλότερης τάξης Οκνηρός και Άπληστος Υπολογισμός

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

Γ2.1 Στοιχεία Αρχιτεκτονικής. Γ Λυκείου Κατεύθυνσης

Θέματα Προγραμματισμού Η/Υ

Διαδικασιακός Προγραμματισμός

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

Προγραμματισμός Υπολογιστών & Εφαρμογές Python. Κ.Π. Γιαλούρης

x 2 = b 1 2x 1 + 4x 2 + x 3 = b 2. x 1 + 2x 2 + x 3 = b 3

Πληροφορική ΙΙ Θεματική Ενότητα 5

Επίλυση Προβληµάτων µε Greedy Αλγόριθµους

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 3 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Προγραμματισμός ΗΥ και Υπολογιστική Φυσική. Χρήστος Γκουμόπουλος

Εισαγωγή στο Συναρτησιακό Προγραμματισμό

Η γλώσσα προγραμματισμού EEL

Διαδικασιακός Προγραμματισμός

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ΚΑΙ Β ) ΤΡΙΤΗ 13 ΙΟΥΝΙΟΥ 2017

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

Συλλογές, Στοίβες και Ουρές

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 8/1/12, 22:00

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 2

Διδάσκων: Παναγιώτης Ανδρέου

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Ανάλυση της Ορθότητας Προγραμμάτων (HR Κεφάλαιο 4)

ΚΕΦΑΛΑΙΟ 5: Αλγόριθµοι

ΜΑΘΗΜΑ ΜΟΝΟΤΟΝΕΣ ΣΥΝΑΡΤΗΣΕΙΣ. Αντίστροφη συνάρτηση. ΑΝΤΙΣΤΡΟΦΗ ΣΥΝΑΡΤΗΣΗ Συνάρτηση 1-1. Θεωρία Σχόλια Μέθοδοι Ασκήσεις

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 9 ο

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Σημειωματάριο Δευτέρας 9 Οκτ. 2017

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

Σημειωματάριο Τετάρτης 29 Νοε. 2017

Θέματα Προγραμματισμού Η/Υ

Γλώσσες Προγραμματισμού Μεταγλωττιστές

ΘΕΜΑ Α. 1. Η δυαδική αναζήτηση χρησιμοποιείται μόνο σε ταξινομημένες συλλογές δεδομένων.

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Σχολικό Βιβλίο - Κεφάλαιο 7 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PASCAL ΠΑΡΟΥΣΙΑΣΗ 13

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΩΝ & Δ ΤΑΞΗΣ ΕΣΠΕΡΙΝΩΝ

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ Η/Υ (ΟΜΑΔΑ ΘΕΜΑΤΩΝ A)

ΚΕΦΑΛΑΙΟ 1ο 3ο. ΚΕΦΑΛΑΙΟ 5ο 6ο. ΚΕΦΑΛΑΙΟ 7ο. Δομημένος Προγραμματισμός - Γενικές Ασκήσεις Επανάληψης

Δομές δεδομένων (2) Αλγόριθμοι

Θέματα Μεταγλωττιστών

Φύλλο Εργασίας 3. Μια γρήγορη επανάληψη από τα προηγούμενα

ΠΛΗ111. Ανοιξη Μάθηµα 4 ο. Στοίβα. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Μεταγλωττιστές Βελτιστοποίηση

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

1 Εισαγωγή στις Μονάδες

FAIL PASS PASS οριακά

ΕΠΑ.Λ ΧΡΥΣΟΥΠΟΛΗΣ Γ Πληροφορική Προγραµµατισµός Υπολογιστών Κεφάλαιο 10 Εργαστηριακή ραστηριότητα 02 ΑΠΑΝΤΗΣΕΙΣ

Συναρτησιακός Προγραμματισμός. Εισαγωγικές Έννοιες

Λύσεις Σειράς Ασκήσεων 5

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

Κεφάλαιο 4. Λογική Σχεδίαση

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διαδικασιακός Προγραμματισμός

Κεφάλαιο 5 Αξιωματική Σημασιολογία και Απόδειξη Ορθότητας Προγραμμάτων

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Εισαγωγή στους Υπολογιστές

Εισαγωγή στους Αλγορίθμους Ενότητα 9η

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΩΝ & Δ ΤΑΞΗΣ ΕΣΠΕΡΙΝΩΝ ΥΠΟΛΕΙΠΟΜΕΝΕΣ ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ HMEΡΗΣΙΩΝ ΚΑΙ ΕΣΠΕΡΙΝΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

Δομές Δεδομένων (Data Structures)

a = 10; a = k; int a,b,c; a = b = c = 10;

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

όπου είναι γνήσια. ρητή συνάρτηση (δηλαδή ο βαθµός του πολυωνύµου υ ( x)

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

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

ΕΡΓΑΣΙΕΣ ΟΝΤΟΚΕΝΤΡΙΚΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

Αριθμητική Ανάλυση και Εφαρμογές

App Inventor 5ο Μάθημα (Κορώνα γράμματα - επέκταση)

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Ελάχιστα Γεννητορικά ένδρα

Transcript:

Συναρτησιακός Προγραµµατισµός 2008 Τρίτο Φύλλο Ασκήσεων - Project Το project αυτό µπορεί να γίνει από οµάδες 1-3 ατόµων και αντιστοιχεί στο 15% του ϐαθµού στο µάθηµα. Συνολικό Αθροισµα Βαθµών: 150 Προθεσµία Παράδοσης: ευτέρα 30 Ιουνίου Σε αυτό το project ϑα υλοποιήσετε τον αλγόριθµο εξαγωγής τύπου Hindley Milner για ένα απλό λ-λογισµό χωρίς τύπους και ένα απλό σύστηµα τύπων. Ο λ-λογισµός που ϑα χρησιµοποιήσετε περιλαµβάνει ϕυσικούς αριθµούς, αληθοτιµές, λίστες καθώς και µερικές ενσωµατωµένες συναρτήσεις. Περιγράφεται από την εξής γραµµατική: t ::= x µεταβλητή n ϕυσική σταθερά (0,1,... κτλ.) true false if t then t else t u t µοναδιαία συνάρτηση t b t δυαδικός τελεστής emptylist κενή λίστα cons t t κατασκευή µη κενής λίστας t t λx.t u ::= head tail isempty b ::= + - * / τελεστές Nat Nat Nat > < = τελεστές Nat Nat Bool εν είναι στους σκοπούς της άσκησης να υλοποιήσετε parser για το λογισµό αυτό. Θεωρήστε ότι ο parser σας έχει ήδη δωθεί και προχωρήστε χρησιµοποιώντας ένα αλγεβρικό τύπο στον οποίο να αναπαρίσταται το δέντρο αφηρηµένης σύνταξης ( abstract syntax tree). Το σύστηµα τύπων που ϑα χρησιµοποιήσετε είναι το παρακάτω: (x : T) Γ Γ x : T Γ n : Nat c {true, false} Γ c : Bool Γ t 1 : Bool Γ t 2 : T Γ t 3 : T Γ if t 1 then t 2 else t 3 : T 1

Γ t : [T ] Γ head t : T Γ t : [T ] Γ tail t : [T ] Γ t : [T ] Γ isempty t : Bool Γ t 1 : Nat Γ t 2 : Nat b {+, -, *, /} Γ t 1 b t 2 : Nat Γ t 1 : Nat Γ t 2 : Nat b {>, <, =} Γ t 1 b t 2 : Bool Γ emptylist : [T ] Γ t 1 : T Γ t 2 : [T ] Γ cons t 1 t 2 : [T ] Γ t 1 : T 2 T 1 Γ t 2 : T 2 Γ t 1 t 2 : T 1 Γ, x : T 1 t : T 2 Γ λx : T 1.t : T 1 T 2 Ο αλγόριθµος ϑα παίρνει µία έκφραση του παραπάνω λ-λογισµού χωρίς τύπους και ϑα επιστρέφει τον πιο γενικό τύπο αυτής της έκφρασης ή ϑα αναφέρει σφάλµα σε περίπτωση που (α) τέτοιος τύπος δεν υπάρχει ή (ϐ) η έκφραση δεν είναι κλειστή (περιέχει αδέσµευτες µεταβλητές). Ο αλγόριθµος που ϑα ϕτιάξετε χωρίζεται σε τρια ϐήµα. Τα δύο πρώτα ϐήµατα µπορούν να γίνουν ταυτόχρονα. Το τρίτο ϐήµα ακολουθεί. Βήµα Ι - Ανάθεση Μεταβλητών Τύπων Στο πρώτο ϐήµα, κάθε υποέκφραση (συµπεριλαµβανοµένης και ολόκληρης της έκφρασης) καθώς και κάθε δεσµεύουσα µεταβλητή αντιστοιχίζεται µε µία ξεχωριστή µεταβλητή τύπων. Για τις µεταβλητές τύπων σε αυτό το ϕυλλάδιο χρησι- µοποιούµε κεφαλαία λατινικά γράµµατα. Παράδειγµα. (λx.x) emptylist Η ανάθεση τύπων γίνεται ως εξής: (λx.x) emptylist : A (λx.x) : B δεσµεύουσα x : C x : D emptylist : E 2

Βήµα ΙΙ - Εξαγωγή Περιορισµών Στο δεύτερο ϐήµα εξάγεται ένα σύνολο περιορισµών C µεταξύ των µεταβλητών τύπων που εισήγαγε το Βήµα Ι. Οι περιορισµοί είναι όλοι της µορφής T 1 = T 2 όπου T i είναι έκφραση τύπων µε µεταβλητές τύπων. Για την εξαγωγή περιορισµών εξετάζουµε κάθε υποέκφραση ξεχωριστά, ξεκινώντας από ολόκληρη την έκφραση. Για κάθε υποέκφραση ακολουθούµε τους κανόνες εξαγωγής περιορισµών που περιγράφουµε παρακάτω. Εστω E µία από τις υποεκφράσεις και έστω X η µεταβλητή τύπων που αντιστοίχησε το Βήµα Ι στην E. Εχουµε τις εξής περιπτώσεις: E = x, όπου x µια µεταβλητή. Εστω Y η µεταβλητή τύπου που εισήγαγε το Βήµα Ι κατά τη δέσµευση 1 της µεταβλητής x. X = Y E = c, όπου µία σταθερά τύπου T µε T = Nat ή T = Bool. Εισάγεται ο περιορισµός X = T E = if t 1 then t 2 else t 3, όπου οι τύποι που εισήγαγε το Βήµα Ι είναι, t 3 : W E = head t, όπου (από Βήµα Ι) Y = Bool, Z = W, X = Z Y = [X] E = tail t, όπου (από Βήµα Ι) Y = X, X = [Z] όπου Z είναι µια καινούρια µεταβλητή τύπων. 1 Αν η x δεν έχει δεσµευθεί, τότε η έκφραση δεν είναι κλειστή και έχουµε σφάλµα. 3

E = isempty t, όπου (από Βήµα Ι) Y = [Z], X = Bool όπου Z είναι µια καινούρια µεταβλητή τύπων. E = t 1 b t 2, όπου ο δυαδικός τελεστής b είναι τύπου T T U και (από Βήµα Ι) Y = T, Z = T, X = U E = emptylist. X = [Y ] όπου Y είναι µια καινούρια µεταβλητή τύπων E = cons t 1 t 2, όπου (Βήµα Ι) Z = [Y ], X = Z E = t 1 t 2, όπου (Βήµα Ι) E = λx.t, όπου (Βήµα Ι) Y = Z X x : Y, t : Z X = Y Z Παράδειγµα. Εξάγονται οι περιορισµοί: B=E A, B=C D, D=C, E=[F] 4

Βήµα ΙΙΙ - Ενοποίηση Εστω C το σύνολο των περιορισµών από το Βήµα ΙΙ. Προσθέτουµε στο C έναν ακόµη περιορισµό A =A. Εστω a ο νέος αυτός περιορισµός. Η µεταβλητή τύπων A είναι καινούρια. Ακολουθούµε την εξής διαδικασία: Για κάθε περιορισµό c C {a} { Αν ο c είναι της µορφής X = T, όπου X µεταβλητή τύπων και X FV (T), τότε εφαρµό- Ϲουµε την µετατροπή [X := T] σε κάθε κανόνα του C. T = X, όπου X µεταβλητή τύπων και X FV (T), τότε χειριζό- µαστε όπως και στην πάνω περίπτωση, για X = T [T 1 ] = [T 2 ], τότε προσθέτουµε τον περιορισµό T 1 = T 2 στο C S 1 T 1 = S 2 T 2, τότε προσθέτουµε τους περιορισµούς S 1 = S 2 και T 1 = T 2 στο C T = T για σταθερό τύπο T ή X = X για µεταβλητή X, τότε δεν κάνουµε τίποτα { Σε κάθε άλλη περίπτωση, τερµατίζουµε µε αποτυχία { Αφαιρούµε τον c από το C Στο τέλος, έχουµε µείνει µε ένα µόνο περιορισµό, της µορφής A =T. Ο T είναι ο πιο γενικός τύπος που αναζητάµε. Παράδειγµα. Μετά την εφαρµογή του πρώτου περιορισµού έχουµε: E A=C D, D=C, E=[F], A =A E=C, A=D, D=C, E=[F], A =A A=D, D=C, C=[F], A =A D=C, C=[F], A =D C=[F], A =C A =[F] Ο πιο γενικός πολυµορφικός τύπος είναι [F], όπου F µία µεταβλητή τύπων. Στη Haskell ϑα γράφαµε [a]. 5