1. Syntax of Prolog programs and their interpretation, unification, backtracking. Declarative and operational semantics of program.
2. Lists and recursive data structures. Built-in predicates and their uses.
3. Arithmetic in Prolog. Input and output. Definition of operators.
4. Cut and negation.
5. Efficiency of Prolog programs, incomplete data structures.
6. Functional programming, basics of LISP (Scheme).
7. Haskell: basic syntax, 2D layout, lazy evaluation.
8. Function definition, recursion, pattern matching. List comprehensions.
9. User-defined types and data structures, polymorphism, type classes.
10. Higher-order functions. Infinite data structures.
11. Input and output, monads.
An introduction to the principles of logical and functional programming, explained in terms of programming languages Prolog and Haskell. The course also provides a basic knowledge of LISP (Scheme).