Proving Theorems about LISP Functions
Journal of the ACM (JACM)
Two languages for estimating program efficiency
Communications of the ACM
Communications of the ACM
Correctness-preserving program transformations
POPL '75 Proceedings of the 2nd ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Symbolic Logic and Mechanical Theorem Proving
Symbolic Logic and Mechanical Theorem Proving
High level operations in automatic programming
Proceedings of the ACM SIGPLAN symposium on Very high level languages
Automatic and semiautomatic optimization of SETL
Proceedings of the ACM SIGPLAN symposium on Very high level languages
Some transformations for developing recursive programs
Proceedings of the international conference on Reliable software
A programming language
Proving the correctness of heuristically optimized code
Communications of the ACM
A partial evaluator, and its use for compiling iterative statements in LISP
POPL '78 Proceedings of the 5th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Program improvement by internal specialization
POPL '81 Proceedings of the 8th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
On compiling embedded languages in LISP
LFP '80 Proceedings of the 1980 ACM conference on LISP and functional programming
A normal form for compiler testing
Proceedings of the 1977 symposium on Artificial intelligence and programming languages
Self-redefinition as a program manipulation strategy
Proceedings of the 1977 symposium on Artificial intelligence and programming languages
On the Transformational Implementation approach to programming
ICSE '76 Proceedings of the 2nd international conference on Software engineering
A knowledge-based approach to using efficiency estimation in program synthesis
IJCAI'79 Proceedings of the 6th international joint conference on Artificial intelligence - Volume 1
Hi-index | 0.04 |
Program development often proceeds by transforming simple, clear programs into complex, involuted, but more efficient ones. This paper examines ways this process can be rendered more systematic. We show how analysis of program performance, partial evaluation of functions, and abstraction of recursive function definitions from recurring subgoals can be combined to yield many global transformations in a methodical fashion. Examples are drawn from compiler optimization, list processing, very high level languages, and APL execution.