A closure is a technique for implementing lexically scoped name binding in a language with first-class functions. It is a record storing a function and an environment, which allows the function to access captured variables through copies of their values or references. Closures enable functions to be invoked outside their scope.

This advanced course reexamines traditional concepts of discrete mathematics (relations, functions, logic, graphs, algebra, automata) in the context of computation and algorithms, necessitating a strong background in discrete math.