Because procedures are first-class, the evaluation of a lambda expression yields a closure consisting of the procedure's code and the environment in which the expression was evaluated.
The code pointer in the closure does not need to be referenced if the operator always evaluates to procedures built from the same lambda expression. Instead, the compiler can emit a direct jump to the applied procedure's code, bypassing the argument-count check on the callee's side.
First, the lambda expression (lambda (a) a) has no free variables, and its value can therefore be constructed at compile time.
Coverage includes syntax, type basics, numeric types, Boolean type and operators, strings and characters, arrays, variables and parameters, expressions and operators, statements, namespaces, classes, inheritance, the object type, structs, access modifiers, interfaces, enums, nested types, generics, delegates, events, Lambda expressions
, anonymous methods, try statements and exceptions, enumeration and iterators, nullable types, operator overloading, extension methods, anonymous types, LINQ, dynamic binding, attributes, caller info attributes (C#5.0), asynchronous functions (C#5.0), unsafe code and pointers, preprocessor directives, and XML documentation.
They ate predicative remarks like 'T[lambda]Hd' and 'F[lambda]Hd', with 'T' and 'F' 'is true', and 'is false', where the lambda expressions
obey the propositional truth schema: T[lambda]p [equivalent to] p.