A refinement of strong sequentiality for term rewriting with constructors
Information and Computation
Compiling lazy pattern matching
LFP '92 Proceedings of the 1992 ACM conference on LISP and functional programming
Denotational abstract interpretation of logic programs
ACM Transactions on Programming Languages and Systems (TOPLAS)
POPL '94 Proceedings of the 21st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Programming in equational logic: beyond strong sequentiality
Information and Computation - Special issue: selections from 1990 IEEE symposium on logic in computer science
Denotational Abstract Interpretation of Functional Logic Programs
SAS '97 Proceedings of the 4th International Symposium on Static Analysis
The Theory and Practice of Transforming Call-by-need into Call-by-value
Proceedings of the Fourth 'Colloque International sur la Programmation' on International Symposium on Programming
Proceedings of the Third International Conference on Algebraic and Logic Programming
Lazy Narrowing in a Graph Machine
Proceedings of the Second International Conference on Algebraic and Logic Programming
Hi-index | 0.00 |
The efficient implementation of functional logic languages relies on finding (if it exists) an optimal evaluation order for the arguments of functions. The problems of finding the best evaluation order, and the sequentiality of program rules are both difficult and can benefit from using static analysis techniques. The second problem is of special interest because the parallel evaluation of arguments is out of the question due to the possibility of backtracking and sharing of free logical variables among different arguments. However, the lack of sequentiality is often syntactic rather than semantic. In this paper we show that an adequate use of type information and strictness analysis can help a compiler to (i) derive an efficient evaluation order, and (ii) generate sequential code from most programs. Data structures (new versions of definitional trees) are introduced to take advantage of this kind of information and manage run time tests when the computation cannot be made sequential at compile time.