Συναρτησιακός Προγραμματισμός
Καλωσορίσατε στο νέο web site του μαθήματος Συναρτησιακός
Προγραμματισμός, για το εαρινό εξάμηνο του 2008!
Στο site αυτό θα βρίσκετε όλες τις σημειώσεις, παρουσιάσεις και
εκφωνήσεις ασκήσεων που θα σας χρειαστούν για το εξάμηνο αυτό.
Επίσης, θα βρίσκετε ανακοινώσεις σχετικά με το μάθημα, οπότε καλό θα
είναι να το επισκέπτεστε συχνά.
Γενικές Πληροφορίες για το Μάθημα
- Διδάσκων:
Γιάννης Κασσιός.
(e-mail στο Τμήμα: kassios - παρακαλώ χρησιμοποιείτε μόνο αυτό το e-mail
για θέματα σχετικά με το μάθημα)
- Διαλέξεις: Τρίτη 17:00-20:00. Αίθουσα Ζ
- Δομή του μαθήματος:
- Εισαγωγή στο Συναρτησιακό Προγραμματισμό
- Εισαγωγή στη γλώσσα Haskell
- Βασικές Δομές Δεδομένων και Απόκρυψη Ονομάτων
- Οκνηρή Αποτίμηση
- Αποδείξεις Ορθότητας
- Πολυμορφισμός και Υπερφόρτωση
- Αλγεβρικοί Τύποι
- Αφηρημένοι Τύποι Δεδομένων
- Εισαγωγή στο λ-λογισμό
- λ-λογισμός με Τύπους και Εισαγωγή στη Θεωρία Τύπων
- Μονάδες
- Άλλες Συναρτησιακές Γλώσσες
- Βαθμολόγηση: 3 ασκήσεις με συντελεστή 15% και τελική εξέταση με
συντελεστή 55%.
Σημειώσεις και Παρουσιάσεις
Σε αυτό το σημείο θα αναρτώνται, σε μορφή pdf, οι σημειώσεις και οι παρουσιάσεις για τις διαλέξεις που έχουν ήδη γίνει. Οι σημειώσεις αυτές είναι και η ύλη του μαθήματος.
Πέραν της ύλης, προτείνονται ως βοηθήματα τα παρακάτω:
Ασκήσεις
Εδώ θα μπαίνουν οι εκφωνήσεις και οι προθεσμίες των ασκήσεων, καθώς και
λύσεις για τις ασκήσεις που έχουν διορθωθεί.
Τελικοί Βαθμοί
Τελικοί Βαθμοί Ιουλίου
Τελικοί Βαθμοί Σεπτεμβρίου
Ανακοινώσεις
- 9/8/08. Οι βαθμοί της εξεταστικής του Σεπτεμβρίου βγήκαν.
- 27/8/08.
Υπενθυμίζεται ότι η επαναληπτική εξέταση του μαθήματος θα γίνει στις
3/9/08 και ώρα 9:00. Αντίθετα από την εξέταση του
Ιουλίου, η εξέταση θα διαρκέσει τρεις ώρες (αλλά τα θέματα θα είναι
πιο απαιτητικά). Οι σημειώσεις επιτρέπονται. Το project, για όσους
θέλουν να το (ξανα)δώσουν έχει προθεσμία και την ημέρα των εξετάσεων.
Η συμμετοχή στις εξετάσεις και στο project είναι προαιρετική. Αν
κάποιος δεν παρουσιαστεί στην εξέταση, θα πάρει το βαθμό του στην
εξέταση του Ιουλίου. Ομοίως, αν κάποιος δεν παραδώσει project, θα
πάρει το βαθμό που πήρε στο project τον Ιούλη. Αν όμως κάποιος δεν
παρουσιαστεί ούτε στις εξετάσεις, ούτε παραδώσει project, θα κοπεί
στο μάθημα.
- 31/7/08. Η τελική βαθμολογία του μαθήματος βγήκε και μπορείτε να τη
δείτε εδώ. Ορισμένες παρατηρήσεις:
- Η βαθμολογία περιλαμβάνει όσους έχουν δώσει έστω και μία άσκηση
στο μάθημα. Επομένως μη σας τρομάξουν οι πολλοί άσσοι. Αν
διαβάζετε αυτό το μήνυμα, μάλλον δε σας αφορούν.
- Η βαθμολογία δεν κατατέθηκε ακόμα στη γραμματεία. Αυτό θα
γίνει στις 7 Αυγούστου. Μέχρι τότε, όποιος από αυτούς που
έχουν περάσει θέλει να γράψει στις επαναληπτικές εξετάσεις και/ή να
ξαναδώσει το project, μπορεί να μου στείλει e-mail και να μου
ζητήσει να τον κόψω.
- Προσοχή! Υπάρχουν φοιτητές που έχουν περάσει χωρίς να
δώσουν project. Αν δε με ειδοποιήσουν εγκαίρως ότι θέλουν να τους
κόψω, θα περάσουν με τους βαθμούς που έχουν, χωρίς να τους δωθεί
ευκαιρία να δώσουν το project.
- Δε θα είμαι διαθέσιμος και δε θα απαντάω στα mail σας από 2/8 έως
5/8. Μη σας ανησυχήσει αυτό.
- 31/7/08. Η βαθμολογία του project βγήκε.
- 24/7/08. Η βαθμολογία της Δεύτερης Σειράς Ασκήσεων βγήκε.
- 19/7/08. Η προηγούμενη ανακοίνωση διορθώνεται ως εξής: Μπορείτε αν
θέλετε να δείτε το γραπτό σας, το αργότερο μέχρι την Παρασκευή 1/8 και
με εξαίρεση τις ημερομηνίες 25-27/7.
- 18/7/08. Οι βαθμοί του τελικού διαγωνίσματος βγήκαν. Μπορείτε αν
θέλετε να δείτε το γραπτό σας, το αργότερο μέχρι την Πέμπτη 24 Ιουλίου.
- 8/7/08. Το project του μαθήματος μπορεί να παραδωθεί και στην
εξεταστική του Σεπτεμβρίου, μέχρι την ημέρα της εξέτασης. Φυσικά,
μπορούν και οι φοιτητές που παρέδωσαν τώρα να ξαναπαραδώσουν το
Σεπτέμβρη για καλύτερο βαθμό.
- 25/6/08. Η τελική εξέταση του μαθήματος θα γίνει την 8/7/08. Θα
διαρκέσει 2 ώρες. Σημειώσεις σχετικά με το μάθημα επιτρέπονται. Η ύλη
είναι όλες οι σημειώσεις (όχι οι διαλέξεις, μόνο οι σημειώσεις)
που έχουν δημοσιευτεί στο site εκτός από λ-λογισμό και λ-λογισμό με
τύπους.
- 25/6/08. Το project παίρνει παράταση μέχρι την ημέρα της εξέτασης,
δηλ. 8/7/07. Δε μπορεί να υπάρξει περεταίρω παράταση για να
προλάβουμε να δώσουμε τους τελικούς βαθμούς στη γραμματεία εγκαίρως.
- 8/6/08. Στο project του μαθήματος, μπορείτε προαιρετικά να
χρησιμοποιήσετε parser. Ένας lexer/parser για παρεμφερή γλώσσα
βρίσκεται εδώ, ευγενική
προσφορά του Λευτέρη Κρητικού και των παιδιών του FOSS group του ΕΜΠ.
Μπορείτε να κατεβάσετε και να κάνετε όποιες αλλαγές θέλετε στον κώδικα.
Μπορείτε επίσης να ανεβάσετε στο site το project σας αν θέλετε. Για
ερωτήσεις σχετικά με τη χρήση του parser μπορείτε να απευθυνθείτε είτε
σε μένα (που θα διαβιβάσω την ερώτηση στο Λευτέρη, φυσικά) ή να γράψετε
εδώ. Όλα αυτά είναι
προαιρετικά, και απευθύνονται σε όσους θέλουν να γνωρίσουν καλύτερα τη
διαδικασία με την οποία χειριζόμαστε τυπικές γλώσσες στη Haskell ή
αυτούς που θέλουν ένα φιλικό user interface για τον αλγόριθμό τους.
Στο project πάντως, αυτό που μετράει είναι το type inference.
- 4/6/08. Στο e-class δημιουργήθηκε μάθημα και forum για το project
του μαθήματος. Παρακαλώ, προσπαθήστε να μπείτε και ενημερώστε με για
οποιοδήποτε πρόβλημα.
- 30/5/08. Βγήκε το project (ή τρίτο φύλλο ασκήσεων) του μαθήματος.
- 30/5/08. Αναρτήθηκε η διάλεξη της 27/5 με σημαντικές διορθώσεις στην
περιγραφή του αλγορίθμου Hindley-Milner. Για περισσότερες
λεπτομέρειες, παραπέμπεστε στην εκφώνηση του project. Οι σημειώσεις
για το λ-λογισμό με τύπους θα αργήσουν.
- 21/5/08.
Για την παράδοση του δεύτερου φύλλου ασκήσεων, δώθηκε εκ νέου
παράταση μέχρι τη Δευτέρα 26/5/08. Όσοι έχουν ήδη παραδόσει την
άσκηση και θέλουν να αλλάξουν κάτι σε αυτήν μέχρι την προθεσμία,
μπορούν να το κάνουν, αρκεί να ξεκαθαρίζουν ότι πρόκειται για αλλαγή
και όχι για καινούρια παράδοση.
- 15/5/08.
Σημαντική διόρθωση στην Άσκηση 1 του 2ου φύλλου ασκήσεων: Όπως
καταλαβαίνετε, λίστες μη ομότυπων αντικειμένων, όπως [2::Int,False] δε
μπορούν να κατασκευαστούν στη Haskell, παρά τη διατύπωση της εκφώνησης
που υποστηρίζει το αντίθετο. Το πρόγραμμά σας θα πρέπει να χειρίζεται
λίστες ομότυπων αντικειμένων, όπως [2::Int,0::Int] και [True,False] και
["","Hello","!"].
- 15/5/08.
Για την παράδοση του δεύτερου φύλλου ασκήσεων, δώθηκε παράταση μέχρι
την Παρασκευή 23/5/08.
- 12/5/08. Βγήκαν οι βαθμοί για το πρώτο φύλλο ασκήσεων.
- 19/4/08. Το δεύτερο φύλλο ασκήσεων είναι διαθέσιμο. Η προθεσμία
είναι μέχρι την Τρίτη 20/5.
- 19/4/08. Το δεύτερο φύλλο ασκήσεων θα δοθεί την Τρίτη 6/5 και η
προθεσμία θα είναι μέχρι την Τρίτη 20/5.
- 19/4/08. Η προθεσμία για την υποβολή του πρώτου φύλλου ασκήσεων έχει
παρέλθει. Περισσότερες υποβολές δε θα γίνουν αποδεχτές.
- 9/4/08. Το λάθος στις διαφάνειες σχετικά με τον τύπο του dovetail3
διορθώθηκε. Ο Hugs δίνει το σωστό τύπο [a]->[b]->[c]->[(a,b,c)].
(Ένας Θεός ξέρει πώς κατάφερα να το αντιγράψω λάθος. :S)
- 9/4/08.
Για την παράδοση του πρώτου φύλλου ασκήσεων, δώθηκε παράταση μέχρι
την Παρασκευή 18/4/08.
- 1/4/08. Το πρώτο φύλλο ασκήσεων δώθηκε. Η προθεσμία για την υποβολή
είναι 15/4/08, ώρα 5μ.μ.
- 20/3/08. Το θέμα που προέκυψε με το foldr την ώρα της διάλεξης
διορθώθηκε. Παρακαλώ, δείτε τις σημειώσεις, καθώς και τις ενημερωμένες
διαφάνειες.
- 20/3/08. Η πρώτη άσκηση του μαθήματος θα δωθεί την 1/4.
- 3/3/08. Αναρτήθηκε το site του μαθήματος. Καλορίζικο! Η πρώτη
διάλεξη θα γίνει αύριο, 4/3/08, ώρα 5μμ, στην Αίθουσα Ζ.
Ευχαριστίες
Ευχαριστώ τους φίλους και συνεργάτες Λένια Μπουλά και Λευτέρη Κρητικό για
την πολύτιμη συνεισφορά τους στο μάθημα. Ευχαριστώ τους Καθ. Πάνο
Ροντογιάννη και Νίκο Παπασπύρου για τις σημειώσεις τους στο λ-λογισμό και
για τις υποδείξεις τους σχετικά με το μάθημα.