Syllabus
Principles of functional programming: expressions, evaluations, functions, and types.
Type definitions and built-in types: numbers, characters, strings and lists. Basic operations
on lists, including map, fold and filter, together with their algebraic properties. Recursive
definitions and structural induction. Simple program calculation. Infinite lists and their
uses. Further data structures: binary trees, general trees. Use of trees for representing
sets and symbolic data. Normal order reduction and lazy evaluation. Simple cost models for
functional programs; time and space complexity.