After following this course, you can:
 Solve problems in a functional way
 Choose and develop suitable data structures for given problems
 Use and deploy modern programming language concepts such as higherorder functions, polymorphism, overloading, recursive data structures
 Reason about functional programs.


Functional programming is a programming discipline that is based on the mathematical notion of a “function”. By using (higher order) “pure” functions, algebraic data types and a strong and flexible typing system results in a highly expressive programming language in which one can define computations in a concise and clear way. The underlying fundamental mathematical computation model is well known and investigated (lambdacalculus, termrewriting) and enables one to reason about programs using relatively simple mathematical techniques such as substitution and induction.
Functional languages play a prominent role in computer science research when investigating new (programming language) concepts. They are also important in the domain of artificial intelligence. Because of their high level of expressive power, they are increasingly used to develop complex software systems.



Basic programming experience at the level of Programming 1 and 2 (BKI131 and BKI132). Experience at Object Oriented Programming is advised.


Written final exam (100% of grade).


During the lectures the theory behind (functional) concepts is taught. During the practical sessions these concepts are put into practice using the programming language Scala.

