We show how the operational features of logic programming can be added as conservative extensions to
a functional base language with call by value
semantics. We will address both concurrent and
constraint logic programming.
As base language we will use a dynamically typed
language that is obtained from SML by eliminating type
declarations and static type checking. Our approach
can be extended to cover all features of Oz.
The experience with the development of Oz tells us that
the outlined approach is the right base for the
practical development of concurrent constraint
programming languages. It avoids unnecessary
duplication of concepts by reusing functional
programming as core technology. Of course, it does not
unify the partly incompatible theories behind
functional and logic programming. They both contribute
at a higher level of abstraction to the understanding
of different aspects of the class of programming
languages proposed here.