Functional Programming
(V3 + Ü2, SS 2014)


The first lecture takes place on Tuesday, April 8.
The lecture has 3 hours per week for Bachelor and Master students.
News
 The inspection of the second exam takes place on 19th of September, room 4201b, at the following times:
 matriculation number smaller than 303000: 14:30  15:00
 matriculation number between 303000 and 321906: 15:00  15:30
 matriculation number larger than 321906: 15:30  16:00
 The results of the exam of Monday, September 15th, are now available in the exercise management system. We also prepared the distribution of grades (V3B, V3M) as well as the distribution of points (V3B, V3M). The mapping from points to grades is the same as for the first exam (see below).
 The second exam will take place at 15th of September, 3pm to 5pm (15 bis 17 Uhr) at the lecture hall Aula 2.
 The inspection of the first exam takes place on 27th of August, 14:0015:30, room 5052.
 The first exam is online: V3B (Solution), V3M (Solution)
 The results of the exam of Wednesday, August 20th, are now available in the exercise management system. We also prepared the distribution of grades (V3B, V3M) as well as the distribution of points (V3B, V3M).
Point range 
Grade 
044.5 
5.0 
4549 
4.0 
49.553.5 
3.7 
5458 
3.3 
58.562.5 
3.0 
6367 
2.7 
67.571.5 
2.3 
7276 
2.0 
76.580.5 
1.7 
8185 
1.3 
85.590 
1.0 
 The first exam will take place at 20th of August, 2pm to 4pm (14 bis 16 Uhr).
 If you could not register for the exam at the central examination office and registered by writing an email to Florian Frohn, you should have received an email with the information where to write the exam. Otherwise, please write another email to Florian Frohn.
 If you write the exam for your Master of Computer Science, you will write the exam at the lecture hall Aula 2. This also concerns those students which are currently studying Bachelor of Computer Science, but want to take the exam already for their Master ("vorgezogene Masterprüfung").
 If you write the exam for your Master Software Systems Engineering, you will write the exam at the lecture hall AH IV.
 If you write the exam for your Master of Mathematics, you will write the exam at the lecture hall AH V.
 If you write the exam for your Bachelor of Computer Science and your matriculation number is smaller than 310000, you will write the exam at the lecture hall Aula 2.
 If you write the exam for your Bachelor of Computer Science and your matriculation number is equal to or larger than 310000, you will write the exam at the lecture hall AH V.
 8.7.2014: To help you prepare for the written exam on August 20, we added links to the exams from the previous semesters.
 4.7.2014: On Friday, July 4, the last lecture took place. So there will be no lecture anymore on Tuesday, July 7. The last exercise course is postponed by one day. So there will be no exercise course on Thursday, July 10. Instead, the last exercise course will be on Friday, July 11, at 12:15 pm.
 4.7.2014: A new exercise sheet is available, which is due on July 11.
 20.6.2014: The lecture on Tuesday, June 24 (on the pure lambda calculus), was
only needed for students attending the V3M variant of the lecture.
 28.5.2014: The lecture on Friday, May 30 (on transforming complex to simple Haskell), was
only needed for students attending the V3B variant of the lecture.
 29.4.2014: The lecture on Friday, May 2 (on monads), was only needed for students attending the V3M variant of the lecture. Similarly, the second part of the lecture on Tuesday, April 29 (on list comprehensions), was only needed for students attending the V3B variant. The lecture on Tuesday, May 6, was again relevant for all students.
Contents
The course gives an introduction to functional programming
using the language Haskell. Moreover, we will discuss
models for the semantics and the implementation of
functional languages. This also includes techniques for
type checking and type inference.
Language
The course is given in English.
Course Notes
The course notes are available here (in German): Course Notes (version of April 4, 2014)
Versions of the Lecture
Not all material of the lecture is needed for all students. More precisely, there are two versions of the lecture:
 V3B This version only contains a subset of the full lecture (with 3 hours per week). It
is relevant for students in Bachelor Informatik and Master Mathematik.
 V3M This version only contains a subset of the full lecture (with 3 hours per week). It
is relevant for students in Master Informatik and Master SSE. This is also the version that is relevant for those students in Bachelor Informatik who already want to attend the masterversion of this course (they can transfer the credits obtained here as soon as they enter the master program).
Area
Theoretical Computer Science
Haskell
In the course, we use the functional programming language Haskell. Information
on Haskell can be found on the Haskell home page www.haskell.org.
To interpret or compile Haskell programs, one can use the Glasgow Haskell Compiler (GHC). For the lecture, we recommend the interactive mode of the GHC (called GHCi). To this end, we recommend to download the Haskell Platform.
References
 P. Thiemann: Grundlagen der funktionalen Programmierung, Teubner, 1994.
 A. Field, P. Harrison: Functional Programming, AddisonWesley, 1988.
 C. Reade: Elements of Functional Programming, AddisonWesley, 1989.
 R. Bird: Introduction to Functional Programming using Haskell,
Prentice Hall Press, 1998.
 P. Pepper: Funktionale Programmierung, Springer, 2002.
 M. M. T. Chakravarty, G. C. Keller: An Introduction to Computing With
Haskell, Pearson, 2002.
Also appeared as "Einführung
in die Programmierung mit Haskell", Pearson, 2004.
 S. J. Thompson: Haskell: The Craft of Functional Programming, AddisonWesley, 1999.
 G. Hutton: Programming in Haskell, Cambridge University Press, 2007.
 S. Peyton Jones: The Implementation of Functional Programming Languages, Prentice Hall, 1987.
 J. Loeckx, K. Sieber: The Foundations of Program Verification, WileyTeubner, 1987.
 S. Peyton Jones (ed.): Haskell 98 Languages and Libraries: The Revised Report.
Cambridge University Press, 2003. (Available from http://haskell.org/onlinereport/)
 S. Peyton Jones: Tackling the Awkward Squad: monadic input/output,
concurrency, exceptions, and foreignlanguage calls in Haskell, Marktoberdorf
Summer School 2000. (Available from http://research.microsoft.com/users/simonpj/papers/marktoberdorf)
50% of the points on the exercise sheets are needed in order to take part in the final exam.
In order to take part in the exercises, please sign
up here.
The exercise sheets can be downloaded here.
 Exercise 1,
Solution 1,
Slides 1
As mentioned in Exercise 3a, here you may use "comparisons" in your program. This means that in Exercise 3a, you may use predefined functions like >, <, ==, etc.

Exercise 2
Solution 2,
Slides 2
30.04.14:
Exercise 2b: changed "Always enclose concatenation (...) in parentheses." to "Always enclose disjunction (...) in parentheses.", s.t., the exercise matches the example.
Exercise 1c: swapped arguments in example

Exercise 3,
cookbook.hs,
recipes.zip,
Solution 3,
Slides 3

Exercise 4,
Solution 4
16.05.14: Exercise 1: added explanation for "less defined than..."

Exercise 5,
Solution 5,
Slides 5
04.06.14: Exercise 1: fixed wrong type

Exercise 6,
Solution 6
10.06.14: Exercise 1: added hint

Exercise 7,
Solution 7,
Slides 7

Exercise 8,
Solution 8
Transparencies
Here are the transparencies used in the lecture.
 Transparency 1 (April 8, 2014)
 Transparency 2 (April 8, 2014)
 Transparency 3 (April 11, 2014)
 Transparency 4 (April 22, 2014)
 Transparency 5 (April 22, 2014)
 Transparency 6 (April 29, 2014)
 Transparency 7 (April 29, 2014)
 Transparency 8 (May 2, 2014)
 Transparency 9 (May 6, 2014)
 Transparency 10 (May 9, 2014)
 Transparency 11 (May 13, 2014)
 Transparency 12 (May 16, 2014)
 Transparency 13 (May 20, 2014)
 Transparency 14 (Mat 23, 2014)
 Transparency 15 (May 30, 2014)
 Transparency 16 (May 30, 2014)
 Transparency 17 (June 6, 2014)
 Transparency 18 (June 17, 2014)
 Transparency 19 (June 27, 2014)
There will be a written exam on
the lecture. It takes place on
August 20, 2014, 2:00 pm. The second written exam will take place on September 15, 2014.
Please register for the exam via Campus. If this is not possible for
your study path, please send an email with your name and
matriculation id to Florian Frohn.
To help you prepare, here are the exams used in previous semesters. Please note that the differences between the V3B and V3M versions of the lecture have changed since then.
Each of these exams took 120 minutes. We put them online so that they can help you when you are preparing for the final exam. We strongly recommend you to solve these exams without looking at the solutions first! It is a good idea to solve these exams also under the conditions of the original exam (i.e., closed book and with a time limit of 120 minutes):
 Exam February 24, 2010 (V3B) / Solutions (V3B)
 Exam February 24, 2010 (V3M) / Solutions (V3M)
 Exam February 24, 2010 (V4) / Solutions (V4)
 Exam March 19, 2010 (V3B) / Solutions (V3B)
 Exam March 19, 2010 (V3M) / Solutions (V3M)
 Exam March 19, 2010 (V4) / Solutions (V4)
 Exam August 15, 2012 (V3B) / Solutions (V3B)
 Exam August 15, 2012 (V3M) / Solutions (V3M)
 Exam September 10, 2012 (V3B) / Solutions (V3B)
 Exam September 10, 2012 (V3M) / Solutions (V3M)
Due to changes in the computer science curriculum, before 2009 there have not been any written exams to determine the final grade for the course "Functional Programming". However, the following old exams were used in earlier semesters for the acquisition of the exercise certificate for students of "Diplom" curricula. Each of these exams took 90 minutes: