School of Computer Science

Module 06-25344 (2016)

Functional Programming

Level 2/I

Martin Escardo Semester 1 10 credits
Co-ordinator: Martin Escardo
Reviewer: Dan Ghica

The Module Description is a strict subset of this Syllabus Page.

Outline

This module will develop practical programming skills in a modern functional programming language. It will strengthen the algorithmic and design skills of the students, within the functional framework, and will introduce them to some advanced programming language features.


Aims

The aims of this module are to:

  • present the basic ideas of functional programming languages
  • demonstrate the main elements of good programming style
  • illustrate some of the uses and applications of functional programming

Learning Outcomes

On successful completion of this module, the student should be able to:

  1. demonstrate practical understanding of a wide range of recursive types
  2. demonstrate practical understanding of infinite data structures
  3. demonstrate practical understanding of lazy programming
  4. understand, manage and use effects
  5. understand and use higher-order functions
  6. demonstrate awareness of type system and modules

Restrictions

None


Pre-requisites

  • 06-28344 - Elements of Functional Computing

Teaching methods

Eleven two-hour weekly lectures plus eleven two-hour demonstrator-supervised laboratory sessions.

Contact Hours: 45 (22 hrs lectures, 22 hrs labs, 1 revision lecture)


Assessment

Sessional: 100% Continuous Assessment (Three class tests will form an internal hurdle; these tests will not contribute to the overall module mark but must be passed).

Supplementary (where allowed): By examination only (100%).


Detailed Syllabus

  1. Introduction: aims of the module; structure and organisation of the module; assessment; teaching methods; style of presentation; useful books.
  2. Functional language paradigm: uses; implementation; history; main features; advantages and disadvantages; languages (e.g., Lisp, ML, OCAML, Haskell);
  3. Fundamental ideas (higher-order functions, currying, uncurrying, function composition, recursion, local definitions); programming style; literate scripts; type systems.
  4. Numbers: basic operations, basic numerical types, numerical type classes.
  5. Lists: basic operations.
  6. Advanced features: e.g., modules; monads; interactive programs; lazy evaluation; proving properties possessed by programs.

Programmes containing this module