Results 1 
2 of
2
A Logically Reversible Evaluator for the CallbyName Lambda Calculus
, 1996
"... this paper we consider normalorder (callbyname) reduction of lambda terms (i.e. programs). This reduction order stipulates that the arguments to a function are not evaluated when the function is applied (called), but rather only when the value of an argument is actually required (as a predicate in ..."
Abstract

Cited by 3 (0 self)
 Add to MetaCart
this paper we consider normalorder (callbyname) reduction of lambda terms (i.e. programs). This reduction order stipulates that the arguments to a function are not evaluated when the function is applied (called), but rather only when the value of an argument is actually required (as a predicate in a conditional, for example). This is in contrast to applicativeorder (callbyvalue) re1 duction where a function's arguments are evaluated before function application. Note that applicativeorder evaluation corresponds to most current programminglanguage practice. We chose normalorder evaluation because the specification of the reversible machine is (slightly) simpler; a similar construction has also been devised for applicativeorder reduction, but it is not described in this paper. The normalorder lambda calculus serves as the programming language for our purposeonly a matter of syntax separates the lambda calculus from realistic functional programming languages. We now need a mechanism for evaluating lambdacalculus programs. Our goal is to render this mechanism reversible. Landin's SECD machine[8] is a nonreversible evaluator for the lambda calculus. We briefly describe SECD in x2.3. In a manner similar to Bennett's RTM construction[3], we extend SECD with a history tape H to yield a reversible lambdacalculus evaluator which we call SECDH. We assume this machine to be finite in all respects; a computation that exceeds the resources of a given instance of SECDH (e.g., out of memory) must be run on a larger, but still finite machine. SECDH computes similarly to Bennett's RTM. Given a terminating program as a lambda term e, SECDH will evaluate e to produce a value v and a history tape h. After computing the output value v, this result is reversibly copied and r...
A Lazy NonDeterministic Functional Language
"... This paper addresses the starting point of the refinement process: the naive program. Although a naive program provides a useful starting point for refinement and is complete with respect to all the possible outcomes it usually exhibits exponential computational complexity which prohibits using the ..."
Abstract
 Add to MetaCart
This paper addresses the starting point of the refinement process: the naive program. Although a naive program provides a useful starting point for refinement and is complete with respect to all the possible outcomes it usually exhibits exponential computational complexity which prohibits using the initial naive system as a prototype