The goal of this course is to understand the essential concepts of declarative programming and develop problem-solving skills with high-level abstractions. This course is important not only because declarative programming is gaining acceptance but also because more and more concepts that were originated in declarative programming are being introduced to mainstream programming languages.
Topics: Functional, logic, and constraint programming paradigms and languages. Logic programming concepts: logic variables, unification, recursion, and backtracking. Constraint solving and constraint programming. Functional programming concepts: lambda calculus, pattern-matching, high-order functions, strong typing, polymorphism, and lazy evaluation. Declarative programming languages: Prolog, F#, CLP (Constraint Logic Programming), constraint libraries for C++ (Gecode) and Java (Choco).