Functional Logic Programming: Improving Logic Programs with Ease
Michael Hanus
Abstract
Logic programming is based on defining relations. Functions are often considered as syntactic sugar which can be transformed into predicates so that their logic is not used for computational purposes. In this paper, we show that the use of functions improves the operational behavior of logic programs without loosing the flexibility of logic programming. For this purpose, we present a systematic transformation from predicates and goals into functions and nested expressions, respectively. By evaluating functions in a demand-driven manner and taking potential failures into account, it is ensured that the execution of the transformed programs will never require more steps than the original programs but can decrease the number of steps---in the best case reducing infinite search spaces to finite ones. Thus, functional logic programming provides an adequate basis to improve the operational behavior of logic programs without changing their semantics. This also shows that, from an operational point of view, functional logic programming has clear advantages compared to relation-based logic programming.
Create a lesson
Related papers
Handling JAX
Oghenevwogaga Ebresafe, Daniel Zheng, Gordon Plotkin et al.
Silent Degradation during Auto-Vectorization of bf16/fp16 on RISC-V Under LLVM
Vaishnavi Kouru, Robert Chun
Vectorizing Recurrences over Semirings
Yihong Zhang, Bala Vinaithirthan, Karima Ma et al.
MBUndo: Sound, Automatic, and Efficient Measurement-Based Uncomputation for Quantum Circuits
Shengyuan Yang, Charles Yuan
te-comp: A Complete MLIR Compiler Generating Self-Contained C Inference Engines for MCUs
Van Chan Ngo
Stochastic Summaries: Characterizing Structured Datasets Using Probabilistic Programs
Jack Stanek, Adithya Murali