Director strings as combinators
ACM Transactions on Programming Languages and Systems (TOPLAS)
An algorithm for optimal lambda calculus reduction
POPL '90 Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
The geometry of optimal lambda reduction
POPL '92 Proceedings of the 19th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A correspondence between continuation passing style and static single assignment form
IR '95 Papers from the 1995 ACM SIGPLAN workshop on Intermediate representations
A notation for lambda terms. A generalization of environment
Theoretical Computer Science
Implementing typed intermediate languages
ICFP '98 Proceedings of the third ACM SIGPLAN international conference on Functional programming
The optimal implementation of functional programming languages
The optimal implementation of functional programming languages
The Definition of Standard ML
The Implementation of Functional Programming Languages (Prentice-Hall International Series in Computer Science)
Scrap your nameplate: (functional pearl)
Proceedings of the tenth ACM SIGPLAN international conference on Functional programming
Call-by-need in token-passing nets
Mathematical Structures in Computer Science
Compiling with continuations, continued
ICFP '07 Proceedings of the 12th ACM SIGPLAN international conference on Functional programming
Complete Laziness: a Natural Semantics
Electronic Notes in Theoretical Computer Science (ENTCS)
A unified approach to fully lazy sharing
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Hi-index | 0.00 |
Representing a λ term as a DAG rather than a tree allows us to represent the sharing that arises from β, thus avoiding combinatorial explosion in space. By adding uplinks from a child to its parents, we can efficiently implement β in a bottom-up manner, thus avoiding combinatorial explosion in time required to search the term in a top-down fashion. We present an algorithm for performing β onλ-terms represented as uplinked DAGs; discuss its relation to alternate techniques such as Lamping graphs, explicit-substitution calculi and director strings; and present some timings of an implementation. Besides being both fast and parsimonious of space, the algorithm is particularly suited to applications such as compilers, theorem provers, and type-manipulation systems that may need to examine terms in-between reductions—i.e., the “readback” problem for our representation is trivial. Like Lamping graphs, and unlike director strings or the suspension λ, the algorithm functions by side-effecting the term containing the redex; the representation is not a “persistent” one. The algorithm additionally has the charm of being quite simple: a complete implementation of the core data structures and algorithms is 180 lines of SML.