The theory and practice of first-class prompts
POPL '88 Proceedings of the 15th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Obtaining lazy evaluation with continuations in scheme
Information Processing Letters
LFP '90 Proceedings of the 1990 ACM conference on LISP and functional programming
The spineless tagless G-machine
FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
The revised report on the syntactic theories of sequential control and state
Theoretical Computer Science
A natural semantics for lazy evaluation
POPL '93 Proceedings of the 20th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Call-by-need and continuation-passing style
Lisp and Symbolic Computation
A call-by-need lambda calculus
POPL '95 Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Scheme: A Interpreter for Extended Lambda Calculus
Higher-Order and Symbolic Computation
Evaluation Under Lambda Abstraction
PLILP '97 Proceedings of the9th International Symposium on Programming Languages: Implementations, Logics, and Programs: Including a Special Trach on Declarative Programming Languages in Education
POPL '76 Proceedings of the 3rd ACM SIGACT-SIGPLAN symposium on Principles on programming languages
The call-by-need lambda calculus
Journal of Functional Programming
Deriving a lazy abstract machine
Journal of Functional Programming
The call-by-need lambda calculus
Journal of Functional Programming
Relating models of backtracking
Proceedings of the ninth ACM SIGPLAN international conference on Functional programming
Backtracking, interleaving, and terminating monad transformers: (functional pearl)
Proceedings of the tenth ACM SIGPLAN international conference on Functional programming
Proceedings of the eleventh ACM SIGPLAN international conference on Functional programming
A concrete framework for environment machines
ACM Transactions on Computational Logic (TOCL)
A monadic framework for delimited continuations
Journal of Functional Programming
A call-by-name lambda-calculus machine
Higher-Order and Symbolic Computation
Improving the lazy Krivine machine
Higher-Order and Symbolic Computation
A static simulation of dynamic delimited control
Higher-Order and Symbolic Computation
Closing the stage: from staged code to typed closures
PEPM '08 Proceedings of the 2008 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Purely functional lazy non-deterministic programming
Proceedings of the 14th ACM SIGPLAN international conference on Functional programming
Small-step and big-step semantics for call-by-need
Journal of Functional Programming
Inter-deriving semantic artifacts for object-oriented programming
Journal of Computer and System Sciences
Three syntactic theories for combinatory graph reduction
LOPSTR'10 Proceedings of the 20th international conference on Logic-based program synthesis and transformation
Classical call-by-need and duality
TLCA'11 Proceedings of the 10th international conference on Typed lambda calculi and applications
Evaluating call-by-need on the control stack
TFP'10 Proceedings of the 11th international conference on Trends in functional programming
Purely functional lazy nondeterministic programming
Journal of Functional Programming - Dedicated to ICFP 2009
Defunctionalized interpreters for call-by-need evaluation
FLOPS'10 Proceedings of the 10th international conference on Functional and Logic Programming
The call-by-need lambda calculus, revisited
ESOP'12 Proceedings of the 21st European conference on Programming Languages and Systems
A systematic approach to delimited control with multiple prompts
ESOP'12 Proceedings of the 21st European conference on Programming Languages and Systems
Classical call-by-need sequent calculi: the unity of semantic artifacts
FLOPS'12 Proceedings of the 11th international conference on Functional and Logic Programming
A synthetic operational account of call-by-need evaluation
Proceedings of the 15th Symposium on Principles and Practice of Declarative Programming
Hi-index | 0.00 |
The call-by-need lambda calculus provides an equational framework for reasoning syntactically about lazy evaluation. This paper examines its operational characteristics. By a series of reasoning steps, we systematically unpack the standard-order reduction relation of the calculus and discover a novel abstract machine definition which, like the calculus, goes "under lambdas." We prove that machine evaluation is equivalent to standard-order evaluation. Unlike traditional abstract machines, delimited control plays a significant role in the machine's behavior. In particular, the machine replaces the manipulation of a heap using store-based effects with disciplined management of the evaluation stack using control-based effects. In short, state is replaced with control. To further articulate this observation, we present a simulation of call-by-need in a call-by-value language using delimited control operations.