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|
|Lazy evaluation||1 week|
|Predicates and terms, proof search||1 week|
|Unification and backtracking||2 weeks|
|Typical applications||2 weeks|