Latest change Nov 22, 2023

Course contents

The purpose of this course is to give the students a solid understanding of functional programming, its applications, and its strengths and weaknesses. This includes knowledge of recursion, advanced data structures, modern type systems, higher order functions, lazy vs. eager evaluation, the importance of freedom of side effects, how to regain stateful (imperative-like) programming while retaining freeedom of side effects, and more. We will also give short orientations of lambda calculus and type inference, in order to enhance the understanding of the functional programming paradigm.

In order to reach these goals, the course will be based on the functional programming language F# (see also Wikipedia). This is a modern functional language, and learning its main features will give you good knowledge of all the things mentioned above. It will also show how powerful the functional programming paradigm can be from a software engineering point of view - this paradigm provides, arguably, the best support for writing concise, reusable, and safe programs. F# originates from Microsoft Research, and it is a member of the .NET family of programming languages. It is also a first class language in Visual Studio.

How to Follow this Course

It is recommended that you read the part in the literature that will be covered before the lecture, see the detailed schedule. Thus you will be able to get more out of the lecture, and you will be able to ask questions about things in the course that are unclear to you.

Be aware that it can be hard to finish the labs in time if you show up unprepared. The lab course (LAB1) is 2hp, which corresponds to 53 hours of work, whereas the scheduled time for the labs is 24 hours: thus, you are expected to spend most of the work with the labs outside the schedule! Therefore, we strongly recommend that you prepare well before you come to the lab session.

The course can also be followed as a distance course, although it is not formally offered as such. Everything that should be needed is provided through this web page and/or Canvas: plan for lectures with lecture material, directions for reading the course literature, laborations, suggested projects, link for downloading the F# compiler, etc. The teachers will be available for questions via e-mail. For this instance of the course the lectures will also be given online, through zoom, and we have made recordings of the lectures from 2022 available through the course place in Canvas. The parts of the course that do require visiting the campus are those involving written examination.


Björn Lisper
bjorn.lisper (at) mdu.se