Compilers: principles, techniques, and tools
Compilers: principles, techniques, and tools
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
A practical framework for the abstract interpretation of logic programs
Journal of Logic Programming
Partial evaluation in logic programming
Journal of Logic Programming
Partial evaluation and automatic program generation
Partial evaluation and automatic program generation
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 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
Homeomorphic embedding for online termination of symbolic methods
The essence of computation
Offline partial evaluation can be as accurate as online partial evaluation
ACM Transactions on Programming Languages and Systems (TOPLAS)
Offline specialisation in Prolog using a hand-written compiler generator
Theory and Practice of Logic Programming
Sequence-based abstract interpretation of Prolog
Theory and Practice of Logic Programming
Science of Computer Programming - Special issue: Static analysis symposium (SAS 2003)
Logic program specialisation through partial deduction: Control issues
Theory and Practice of Logic Programming
Non-leftmost unfolding in partial evaluation of logic programs with impure predicates
LOPSTR'05 Proceedings of the 15th international conference on Logic Based Program Synthesis and Transformation
Fully automatic binding-time analysis for prolog
LOPSTR'04 Proceedings of the 14th international conference on Logic Based Program Synthesis and Transformation
Hi-index | 0.00 |
The most successful unfolding rules used nowadays in the partial evaluation of logic programs are based on well quasi orders (wqo) applied over (covering) ancestors, i.e., a subsequence of the atoms selected during a derivation. Ancestor (sub)sequences are used to increase the specialization power of unfolding while still guaranteeing termination and also to reduce the number of atoms for which the wqo has to be checked. Unfortunately, maintaining the structure of the ancestor relation during unfolding introduces significant overhead. We propose an efficient, practical local unfolding rule based on the notion of covering ancestors which can be used in combination with a wqo and allows a stack-based implementation without losing any opportunities for specialization. Using our technique, certain nonleftmost unfoldings are allowed as long as local unfolding is performed, i.e., we cover depth-first strategies. To deal with practical programs, we propose assertion-based techniques which allow our approach to treat programs that include (Prolog) built-ins and external predicates in a very extensible manner, for the case of leftmost unfolding. Finally, we report on our implementation of these techniques embedded in a practical partial evaluator, which shows that our techniques, in addition to dealing with practical programs, are also significantly more efficient in time and somewhat more efficient in memory than traditional tree-based implementations.