Starting at a seminal paper published by J. Jaffar and J.L. Lassez in 1987, Constraint Logic Programming (CLP) has developed as a powerful programming paradigm which supports a clean combination of logic (in the form of Horn clauses) and domain-specific methods for constraint satisfaction, simpification and optimization. The known mathematical foundations of logic programming have been succesfully extended to CLP. Simultaneously, practical applications of CLP have arisen in many fields
On the other hand, the combination of logic programming with other declarative programming paradigms (especially functional programming) has been widely investigated during the last decade, leading to useful insights for the design of more expressive declarative languages.
In this lecture we will deal with the combination of functional, logic and constraint programming. In a first part, we will describe an approach to the integration of functional and logic programming, based on a rewriting logic. We will consider the formalization of program semantics and goal solving within this approach, and we will examine their compatibility with the semantics and execution models already existing for relational logic languages and functional languages. The second part of the lecture will present the extensions of the former approach needed to introduce algebraic datatypes and constraints. Finally, in the last part we will use the experimental language TOY to discuss some programming examples.