Eliminating Redundant Recursive Calls.
ACM Transactions on Programming Languages and Systems (TOPLAS)
A Transformation System for Developing Recursive Programs
Journal of the ACM (JACM)
Tabulation Techniques for Recursive Programs
ACM Computing Surveys (CSUR)
Program development by stepwise refinement
Communications of the ACM
Selected writings on computing: a personal perspective
Selected writings on computing: a personal perspective
Algorithms + Data Structures = Programs
Algorithms + Data Structures = Programs
Program improvement by internal specialization
POPL '81 Proceedings of the 8th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Algorithmic Language and Program Development
Algorithmic Language and Program Development
Online partial deduction of logic programs
PEPM '93 Proceedings of the 1993 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Caching intermediate results for program improvement
PEPM '95 Proceedings of the 1995 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Discovering auxiliary information for incremental computation
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A bounds inference method for vector-based memoization
ICFP '97 Proceedings of the second ACM SIGPLAN international conference on Functional programming
Static caching for incremental computation
ACM Transactions on Programming Languages and Systems (TOPLAS)
From recursion to iteration: what are the optimizations?
PEPM '00 Proceedings of the 2000 ACM SIGPLAN workshop on Partial evaluation and semantics-based program manipulation
Efficiency by Incrementalization: An Introduction
Higher-Order and Symbolic Computation
Program optimization using indexed and recursive data structures
PEPM '02 Proceedings of the 2002 ACM SIGPLAN workshop on Partial evaluation and semantics-based program manipulation
Recursive Program Optimization through Inductive Synthesis Proof Transformation
Journal of Automated Reasoning
Dynamic Programming via Static Incrementalization
Higher-Order and Symbolic Computation
Dynamic Programming via Static Incrementalization
ESOP '99 Proceedings of the 8th European Symposium on Programming Languages and Systems
PADO '01 Proceedings of the Second Symposium on Programs as Data Objects
Optimizing Ackermann's function by incrementalization
Proceedings of the 2003 ACM SIGPLAN workshop on Partial evaluation and semantics-based program manipulation
Redundant Call Elimination via Tupling
Fundamenta Informaticae - Program Transformation: Theoretical Foundations and Basic Techniques. Part 2
The transformational approach to program development
A 25-year perspective on logic programming
An expression processor: a case study in refactoring haskell programs
TFP'10 Proceedings of the 11th international conference on Trends in functional programming
Redundant Call Elimination via Tupling
Fundamenta Informaticae - Program Transformation: Theoretical Foundations and Basic Techniques. Part 2
Hi-index | 0.00 |
We present a method for deriving efficient iterative programs by transformation from recursive equation specifications. It consists of two phases: i) the transformation of general recursive programs into linear recursive ones, and ii) the transformation of linear recursive programs into iterative ones. In the first phase we apply the “tupling strategy” studied in [BUD77, Pet77], and implicitly used by other authors in the area of program transformation. That strategy enables us to introduce linear recursive functions, instead of the general recursive ones occurring in program specifications. In the second phase we apply known methods for transforming linear recursion into iteration (avoiding the use of stacks) [WaS73], and equivalence results between recursive schemas and flowchart schemas. Through various examples we show how the breaking of the transformation process into the above mentioned phases allows the derivation of efficient iterative algorithms. Those examples include challenges by Prof. E. Dijkstra and other authors. Through our method we were also able to improve some recent results for eliminating redundant calls in recursive programs [Coh83].