In the programming languages you are used with (such as Java and C++) you instruct the computer to cary on a certain computation by specifying a sequence of basic computation steps. This falls into the ``imperative'' programming paradigm. We talk in this course about two other ways of accomplishing the same task (writing a program that solves a certain problem) in a ``declarative'' way, i.e., by describing the problem in a certain formalism and then letting the computer to do the rest. Specifically, we talk about two ways of accomplishing this: the functional and logic programming paradigms.
We thus base the course on the following rough (i.e., subject to change) outline:
Introduction to Haskell | 1 week |
Techniques and methods | 2 weeks |
Types | 2 weeks |
Lazy evaluation | 1 week |
Correctness | 1 week |
Predicates and terms, proof search | 1 week |
Unification and backtracking | 2 weeks |
Typical applications | 2 weeks |