EDAN40 Syllabus
Introduction
With mainstream programming languages we understand programs by understanding how the computer sequentially executes the program. Functional programming represents a different approach to programming. By interpreting variables in the mathematical sense the program semantics can be understood by simple rewrite rules. Higher order functions become natural building blocks, and you can work with infinite data structures. As a consequence, programs can be made much shorter and easier to understand. The importance of functional programming is further elaborated in the essay Why functional programming matters.
This course aims to make functional techniques and thought patterns part of your programming repertoire. In order to establish these skills the course emphasizes practical programming exercises using the functional language Haskell. Not only do they exercise programming with a more mathematical mindset, they also demonstrate how functional programming can be used in some practical applications.
Prerequisites
Programming, Algorithms and data structures (e.g., EDAA01 suffices).
Additional recommendation: Mathematics 22.5 ECTS
Course structure
During the first two weeks of the course you will get acquainted with the Haskell language, primarily by yourself, using any of the tutorials or textbooks available. Some possibilities are listed on the Literature and links page. This phase will be supported by the first four lectures and the first class.
Then the main part of the course begins. It consists of three programming assignments.
A number of lectures will be given throughout the course on topics needing a more in-depth treatment. See the lecture material page for more details. Generally speaking, common (EDAF95 and EDAN40) lectures focus more on practice of functional programming, while the extra four (EDAN40 only) augment it with the necessary theory and higher-level concepts.
Aditionally, there will be three class sessions (common to both courses) devoted to practical exercises and problem solving on several course topics. See the class page for details.
Finally, there will be two help sessions (common to both courses) devoted to anything you want, during the last two weeks of the course
(Tue 7/5 15-17, and Wed 15/5 15-17), both in E:Mars. Besides that, most of us are checking the course dicord server quite often.
Examination
To pass on this course you need to have three assignments approved. Deadlines are strict in the sense that solutions which are handed in too late will be disregarded unless an agreement has been made in advance with a teacher. Obviously inadequate solutions will also fail immediately.
Moreover, there will be a written exam at the end of the course. The earlier exams may be found on the exams page.
The written exam will take place on May 30th, 2024. Reexam will be held on August 22nd, 2024.
Literature and online resources
A couple of possible textbooks for this course, together with more reading hints, can be found on the literature and links page.
You will (hopefully:-) also study various papers and manuals which accompany the libraries
used in the programming assignments.
Teaching days
Lectures: normally Mondays, 13-15 and Wednesdays 13-15.
Classes: normally Thursdays 13-15, weeks 2, 4 and 6.
Resource hours: Tuesday week 6 and Wednesday week 7.