Latest change March 18, 2021

Examination

There will be:

To get a pass on the course, you need to pass all these examination moments. The final grade (U-3-4-5) is based on the grade for the written exam. Completed laborations and project before the first exam gives a one step raise of the grade at this exam: 3 -> 4, and 4 -> 5. (Note that you can not get a raise from U to 3.) This exam was planned to take place March 26th, 2020, but will be replaced by some form of examination at a date yet to be decided. Complete and correct laborations and projects must thus be handed in before that date, if you want the raise. The raise applies only to this exam, and not to any later exams.

Those of you who need to be examined in the earlier version of the course (DVA201): you will need to register for the new version of the course. If you have completed any part of the examination (TEN1, LAB1, PRO1) for the old course, then you can apply to have this accounted for in the new version of the course. As a rule I will grant such applications without further ado.

Oldtimers who have taken the earlier, Haskell-based functional programming course (CDT201, or CD5100): if you want to be examined, please get in touch with me to see if we can find a solution for you.

Laborations

There will be four laborations, see the schedule. You will typically do the laborations in groups of two. The laborations are in F#. They are to be done using functional programming techniques, unless otherwise stated, which means that they should not use mutable variables, and that side effects should be avoided.

Lab 1, getting started.

Lab 2, lists, higher order functions, and defining own data types.

Lab 3, topic "some simple natural language processing".

Lab 4, A calculator with a GUI.

The scheduled laborations will take place in the usual computer rooms, with Windows-equipped PC's. F# 4.1, and VS 2017 are set up on these machines.

The laborations will be examined as follows: you first make an oral presentation of your solution for the lab assistant, showing how it works. Once your solution is approved, you should also submit your code in Canvas.

For Lab 1 and Lab 2 you will use the .NET testing tool FsCheck for testing your solutions to the assignments. We have prepared a zip archive labs.zip with FsCheck and some supporting code: see our instructions how to use FsCheck for the laborations.

If you run an older version of F# or VS then most of the lab exercises should still work right away. However, for Lab 4 it can make a difference: the lab instructions give support for different F# versions, and the FAQ provides some further support. The differences between the different F# versions are summarised by the Wikipedia page for F#.

Instructions how to download F# are found here.

Project

There will also be a programming project, where you are given a problem to solve using functional programming techniques. The project will take place towards the end of the course, and the workload should correspond to roughly one manweek per person. The idea is that you work with the project quite independently, but we will provide advising.

There are some suggested projects to choose from. However, you can also suggest your own projects. In this case you should write your own specification of the project and give to us. We will then judge it, possibly suggest modifications, and finally decide whether we think it is appropriate or not.

The project is done in groups of at most two persons. Two is the preferred size of the project groups, but you can also do a project on your own.

The projects will be examined using Canvas. There you should upload the source code, and a short written report (typically 2-3 pages) containing the following:

If you do a project suggested by yourself, then the report should also include the project specification. The solution will be judged primarily for correctness, but also for efficiency, clarity, etc. This means, for instance, that a very clumsy solution that works still might require some improvement to pass. The report will also be judged: thus, we might require that a poor report is rewritten before we give a pass on the project.

Written Exam

The written exam is four hours long. Course literature is not allowed at the exam. This also includes all other information that could replace parts or all of the course literature, such as own notes, copies of slides, other books, and such. Computers with F# implementations (or any other stored information that could aid the student) are also not allowed. However, "general" aids, that are not specific to F# or functional programming, are allowed, such as calculators without any stored information of relevance to the course.

Please note that signup for the exam in advance is mandatory! Signup is to be done through the MDH Student Portal.

This Year's Exams

First exam. Thursday 2020-03-26, 14:10-18:30. This exam was cancelled due to the campus lockdown.

Next exam. Tuesday 2020-06-09, 14:10-19:30. This exam was a take-home exam (hemtentamen), due to the campus lockdown. Instructions for how to take take-home exams in the course are found here.

Next next exam. Thursday 2020-08-13, 14:10-18:30. Also this exam was a take-home exam. The same instructions applied as for the exam in June, except that this time no extra hour was given.

Old Exams

See the web page for the Spring 2019 edition of the course.

Rules of Conduct

Code that is brought forward for examination, for a laboration, for the project, or at the written exam, must be original. It is not allowed to copy the code from somewhere, like from the web, or from some friend. The project report must also be written by yourself. A violation of this rule will be considered as plagiarism, and dealt with as such.

It is OK to discuss with other students, in general terms, how to solve a certain kind of problem. But it is not allowed to disclose your solutions to other students such that they can base their solutions on yours. This will be seen as assistance to plagiarism. In particular it is not allowed to make your solutions publically available, at sites like github or sourceforge, such that other students taking the course can access them. The underlying principle is this: helping someone to understand is OK, helping someone to pass the examination without understanding is not OK.

In case you do a laboration or project in a pair, then it is OK that you divide the work between yourselves such that some of the code, or the report, is written by your teammate. You should then divide the work evenly: in particular it is not OK that one teammate does all the work, and the other teammate no work. You should also understand the parts of the laboration/project that you did not do yourself, and be able to answer questions also on those parts.

For the written exam, the usual rules apply. (See above for what you are allowed to bring to the exam.)


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