Any expression  M  in ULC (the untyped I�-calculus) can be compiled into a rather low-level language we call LLL, whose programs contain  none of the traditional implementation devices for functional languages:  environments, thunks, closures, etc. A compiled program is first-order functional and has a fixed set of working variables, whose number is independent of  M . The generated LLL code in effect  traverses  the subexpressions of  M .   We apply the techniques of  game semantics  to the untyped I�-calculus, but take a more operational viewpoint that uses less mathematical machinery than traditional presentations of game semantics. Further, the untyped lambda calculus ULC is compiled into LLL by  partially evaluating  a traversal algorithm for ULC.
['Daniil Berezun', 'Neil D. Jones']
Compiling untyped lambda calculus to lower-level code by game semantics and partial evaluation (invited paper)