Lambda-Dropping: Transforming Recursive Equations into Programs with Block Structure
Olivier Danvy, Ulrik Pagh Schultz · BRICS Report Series · 1999
Lambda-lifting a block-structured program transforms it into a set of recursive equations. We present the symmetric transformation: lambda-dropping. Lambda-dropping a set of recursive equations restores block structure and lexical scope. For lack of block structure and lexical scope, recursive equations must carry around all the parameters that any of their callees might possibly need. Both lambda-lifting and lambda-dropping thus require one to compute Def/Use paths: - for lambda-lifting: each of the functions occurring in the path of a free variable is passed this variable as a parameter; - for lambda-dropping: parameters which are used in the same scope as their definition do not need to be passed along in their path. A program whose blocks have no free variables is scope-insensitive. Its blocks are then free to float (for lambda-lifting) or to sink (for lambda-dropping) along the vertices of the scope tree.