Goal:
Provide a wide understanding of the principles of programming languages, problem solving, program construction, and software design. Programming languages: Scheme, ML, Prolog.
Course plan:
I. Chapter 1: Functional programming I – The elements of programming
- Expressions, naming, procedures, symbols, conditionals.
- Types.
- Contracts
- Syntax and operational semantics.
- Static-dynamic scoping.
II. Chapter 2: Functional programming II – High order procedures and verification of simple programs.
- Procedures and the processes they generate.
- High order procedures.
- Simple program verification.
III. Chapter 3: Functional programming III – Abstraction with Data
- Data abstraction with procedures.
- Polymorphic type checking.
- Lists.
- Sequence based interface operations.
- * Streams.
- * Interface implementation in a functional language.
IV. Chapter 4: Imperative programming – Introducing State
- Assignment and local state.
- The environment model operational semantics: Replacing substitution by environments.
- Implementing Object-Oriented programming with closures.
- Modeling with mutable data.
V. Chapter 5: Evaluators for functional programming (in Scheme).
- The basic evaluator.
- Analyzer: Separating syntactic analysis from evaluation.
- * Lazy evaluator.
- Continuation Passing Style (CPS).
VI. Chapter 6: Statically typed Functional programming – Programming in ML.
- Polymorphic types.
- Static type checking.
- Type inference.
- Pattern matching based function call.
VII. Chapter 7: Logic programming – Programming in Prolog.
- Relational logic programming.
- Full logic programming.
- Prolog programming.
- Implementing evaluators for logic programming (in Prolog).
* Sections marked with "*" may be skipped if time is short.