Please note that the content of this book primarily consists of articles available from Wikipedia or other free sources online. Pages: 25. Chapters: Administrative normal form, Categorical abstract machine, Closure (computer science), Continuation-passing style, Deforestation (computer science), Defunctionalization, Functional compiler, Graph reduction, Hash consing, Lambda lifting, Lazy evaluation, Partial application, SECD machine, Strictness analysis, Supercombinator, Syntactic closure, Tail call, Thunk (functional programming). Excerpt: In computer science, a closure (also lexical closure or function closure) is a function or reference to a function together with a referencing environment-a table storing a reference to each of the non-local variables (also called free variables) of that function. A closure-unlike a plain function pointer-allows a function to access those non-local variables even when invoked outside of its immediate lexical scope. The concept of closures was developed in the 1960s and was first fully implemented in 1975 as a language feature in the Scheme programming language to support lexically scoped first-class functions. The explicit use of closures is associated with functional programming languages such as Lisp and ML, as traditional imperative languages such as Algol, C and Pascal did not support returning nested functions as results of higher-order functions and thus did not require supporting closures either. Many modern garbage-collected imperative languages support closures, such as Smalltalk (the first object-oriented language to do so) and C#. Support for closures in Java is planned for Java 8. The following fragment of Python 3 code defines a function counter with a local variable x and a nested function increment. This nested function increment has access to x, which from its point of view is a non-local variable. The function counter returns a closure containing a reference to the function increment, which increments...