Functional and Concurrent Programming - CO545

Location Term Level Credits (ECTS) Current Convenor 2018-19
Canterbury Spring
View Timetable
5 15 (7.5) PROF S Thompson


CO320 is a prerequisite. CO523 is a co-requisite alternative to CO320.





This module will introduce students to fundamental concepts of functional and concurrent programming, using a suitable language (e.g. Erlang) as a vehicle to put these concepts into practice. The first part of the module will cover basic ideas in functional programming, such as expressions, types, values, lists, pattern-matching and recursion, together with the specific language concurrency model, including process creation, message sending and receiving. Good concurrent design practices will be considered, based on networks of communicating processes (e.g. Actor and CSP models), and avoiding problems such as deadlock, livelock and starvation.
The later part of the module will cover more advanced topics (higher-order functions) and look at alternative concurrency models (e.g. synchronous, channel-based, join-based and shared-memory) and their relationship to the model described in the first part of the module. Alongside this, consideration will be given to the relevance and applicability of functional and concurrent programming for use in real applications.


This module appears in:

Contact hours

22 hours of lectures
22 hours of terminal classes and seminars

Method of assessment

Examination 50%
Coursework 50%

Indicative reading

Erlang Programming", Francesco Cesarini and Simon Thompson, O'Reilly Media,
2009. ISBN 0-596-51818-8.
"Programming Erlang: Software for a Concurrent World", Joe Armstrong, Pragmatic
Bookshelf, 2007. ISBN 1-934-35600-X.

See the library reading list for this module (Canterbury)

See the library reading list for this module (Medway)

Learning outcomes

Have a basic understanding of the concepts of functional programming: how evaluation operates, side-effect-free programming, the role of types and type definitions.
Have a basic understanding of the concepts of concurrent programming: software processes/threads, communication and synchronisation.
Be able to use effectively functional and concurrent programming paradigms to design systems.
Be able to implement functional and concurrent programs to solve specific problems using appropriate programming paradigms.
Be able to understand and use recursion and higher-order functions in functional programming.
Have an understanding of deadlock, livelock and starvation when designing concurrent systems.

University of Kent makes every effort to ensure that module information is accurate for the relevant academic session and to provide educational services as described. However, courses, services and other matters may be subject to change. Please read our full disclaimer.