Results 1 -
2 of
2
The Call-by-Need Lambda Calculus
- Journal of Functional Programming
, 1994
"... We present a calculus that captures the operational semantics of call-by-need. The call-by-need lambda calculus is confluent, has a notion of standard reduction, and entails the same observational equivalence relation as the call-by-name calculus. The system can be formulated with or without explici ..."
Abstract
-
Cited by 36 (2 self)
- Add to MetaCart
We present a calculus that captures the operational semantics of call-by-need. The call-by-need lambda calculus is confluent, has a notion of standard reduction, and entails the same observational equivalence relation as the call-by-name calculus. The system can be formulated with or without explicit let bindings, admits useful notions of marking and developments, and has a straightforward operational interpretation. Introduction The correspondence between call-by-value lambda calculi and strict functional languages (such as the pure subset of Standard ML) is quite good; the correspondence between callby -name lambda calculi and lazy functional languages (such as Miranda or Haskell) is not so good. Call-by-name re-evaluates an argument each time it is used, a prohibitive expense. Thus, many lazy languages are implemented using the call-by-need mechanism proposed by Wadsworth (1971), which overwrites an argument with its value the first time it is evaluated, avoiding the need for any s...
The Call-by-Need Lambda Calculus (Unabridged)
, 1994
"... We present a calculus that captures the operational semantics of call-by-need. We demonstrate that the calculus is confluent and standardizable and entails the same observational equivalences as call-by-name lambda calculus. 1 Introduction Procedure calls come in three styles: call-by-value, call-b ..."
Abstract
-
Cited by 4 (0 self)
- Add to MetaCart
We present a calculus that captures the operational semantics of call-by-need. We demonstrate that the calculus is confluent and standardizable and entails the same observational equivalences as call-by-name lambda calculus. 1 Introduction Procedure calls come in three styles: call-by-value, call-by-name and call-by-need. The first two of these possess elegant models in the form of corresponding lambda calculi. This paper shows that the third may be equipped with a similar model. The correspondence between call-by-value lambda calculi and strict functional languages (such as the pure subset of Standard ML) is quite good. The call-by-value mechanism of evaluating an argument in advance is well suited for practical use. The correspondence between call-by-name lambda calculi and lazy functional languages (such as Miranda or Haskell) is not so good. Call-by-name re-evaluates an argument each time it is used, which is prohibitively expensive. So lazy languages are implemented using the cal...

