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.
Programming, Algorithms and data structures (e.g., EDAA01 suffices).
Additional recommendation: Mathematics 25 ECTS
During the 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 two (EDAF40) or three (EDAN40) programming assignments. Each assignment and the problem area it illustrates will be presented during a lecture.
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 (EDAF40 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
page for details.
To pass on this course you need to have two (EDAF40) or three (EDAN40) 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 at 14-19, June 3rd, 2019. Reexam will be held at 8-13, August 21st, 2019.
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.
Lectures: normally Mondays, 13-15 and Wednesdays 10-12, with exceptions. The lecture halls may be changed with short notice!
Classes: Thursdays, weeks 2, 4 and 6.
Labs: Mondays, Tuesdays or Wednesdays, weeks 2, 3, 4, 5, 6.