Background:<p>While predicate logic (first-order logic) provides the logical foundation for logic programming (Prolog etc.) and databases, functional programming is based on the different formalism of the lambda calculus.<p>There are proposals to combine functional and logic programming paradigms into "functional logic programming" languages, but these involve mapping between the two rather than being purely based on predicate logic.<p>Abstract:<p>«Logic programming is a flexible programming paradigm due to the use of predicates without a fixed data flow.<p>To extend logic languages with the compact notation of functional programming, there are various proposals to map evaluable functions into predicates in order to stay in the logic programming framework.<p>Since amalgamated functional logic languages offer flexible as well as efficient evaluation strategies, we propose an opposite approach in this paper.<p>By mapping logic programs into functional logic programs with a transformation based on inferring functional dependencies, we develop a fully automatic transformation which keeps the flexibility of logic programming but can improve computations by reducing infinite search spaces to finite ones.
«