Foundations of logic programming; (2nd extended ed.)
Foundations of logic programming; (2nd extended ed.)
A partial evaluation system for Prolog: some practical considerations
New Generation Computing - Special Issue: Selected Papers from the Workshop on Partial Evaluation and Mixed
Partial evaluation in logic programming
Journal of Logic Programming
Tutorial on specialisation of logic programs
PEPM '93 Proceedings of the 1993 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Mixtus: an automatic partial evaluator for full Prolog
New Generation Computing
A transformation system for CLP with dynamic scheduling and CCP
PEPM '97 Proceedings of the 1997 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
An Introduction to Partial Deduction
META-92 Proceedings of the 3rd International Workshop on Meta-Programming in Logic
An Assertion Language for Constraint Logic Programs
Analysis and Visualization Tools for Constraint Programming, Constrain Debugging (DiSCiPl project)
Partial Evaluation of the "Real Thing"
LOPSTR '94/META '94 Proceedings of the 4th International Workshops on Logic Programming Synthesis and Transformation - Meta-Programming in Logic
Offline specialisation in Prolog using a hand-written compiler generator
Theory and Practice of Logic Programming
A backward analysis for constraint logic programs
Theory and Practice of Logic Programming
Logic program specialisation through partial deduction: Control issues
Theory and Practice of Logic Programming
Efficient local unfolding with ancestor stacks for full prolog
LOPSTR'04 Proceedings of the 14th international conference on Logic Based Program Synthesis and Transformation
Poly-controlled partial evaluation
Proceedings of the 8th ACM SIGPLAN international conference on Principles and practice of declarative programming
Quasi-terminating logic programs for ensuring the termination of partial evaluation
Proceedings of the 2007 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Poly-controlled partial evaluation in practice
Proceedings of the 2007 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
A Study on the Practicality of Poly-Controlled Partial Evaluation
Electronic Notes in Theoretical Computer Science (ENTCS)
Improving the Decompilation of Java Bytecode to Prolog by Partial Evaluation
Electronic Notes in Theoretical Computer Science (ENTCS)
Oracle-Based Partial Evaluation
Electronic Notes in Theoretical Computer Science (ENTCS)
Type-Based Homeomorphic Embedding and Its Applications to Online Partial Evaluation
Logic-Based Program Synthesis and Transformation
Fast Offline Partial Evaluation of Large Logic Programs
Logic-Based Program Synthesis and Transformation
Decompilation of Java bytecode to Prolog by partial evaluation
Information and Software Technology
Test case generation for object-oriented imperative languages in clp*
Theory and Practice of Logic Programming
Efficient local unfolding with ancestor stacks*
Theory and Practice of Logic Programming
Abstract interpretation with specialized definitions
SAS'06 Proceedings of the 13th international conference on Static Analysis
Hi-index | 0.00 |
Partial evaluation of logic programs which contain impure predicates poses non-trivial challenges. Impure predicates include those which produce side-effects, raise errors (or exceptions), and those whose truth value varies according to the degree of instantiation of arguments. In particular, non-leftmost unfolding steps can produce incorrect results since the independence of the computation rule no longer holds in the presence of impure predicates. Existing proposals allow non-leftmost unfolding steps, but at the cost of accuracy: bindings and failure are not propagated backwards to predicates which are potentially impure. In this work we propose a partial evaluation scheme which substantially reduces the situations in which such backpropagation has to be avoided. With this aim, our partial evaluator takes into account the information about purity of predicates expressed in terms of assertions. This allows some optimizations which are not feasible using existing partial evaluation techniques. We argue that our proposal goes beyond existing ones in that it is a) accurate, since the classification of pure vs impure is done at the level of atoms instead of predicates, b) extensible, as the information about purity can be added to programs using assertions without having to modify the partial evaluator itself, and c) automatic, since (backwards) analysis can be used to automatically infer the required assertions. Our approach has been implemented in the context of CiaoPP, the abstract interpretation-based preprocessor of the Ciao logic programming system.