CSC316: Functional Programming 6 credits (30-0-30)

Objectives

This course teaches the student a functional programming language. That is, one where instructions are expressions evaluated as mathematical functions.

Contents

Introduction: historical; declarative vs. imperative programming; families of functional languages. Various definitions: Functions; bindings; intensions and extensions, etc. Introductory lambda-calculus: History and notation; use of notions such as occurrence, substitution, reductions and the Church-Rosser theorem; fixedpoint combinators; notion of typed lambda-calculus. Semantics of applicative programming languages: static, dynamic, recursive, etc. Functions: applications; early/lazy evaluation; abstractions; currying, unification. Data structures (including lists) and values; type and type systems; polymorphism; mutable data structures. Pragmatics: compilation process; garbage collection; support tools/environment of the functional language. Assorted functional programming techniques. Input/output; streams. Learn a functional programming language: the language core, relevant libraries, and exposure to any imperative and object oriented concepts or their semantic foundations (e.g., mutable data structures, inheritance/modularity).

Laboratory: Learn a functional programming language (e.g. Ocaml, ML or Haskell).

Prerequisite:

CSC209 (or relevant mathematics background)