In this teaching session, I will introduce the lambda calculus, an absurdly simple programming language that nonetheless has the same power as modern programming languages. When writing programs in Python, Java, or C, we combine numbers, names, and other symbols to capture mathematical operations, control program execution (loops and conditionals), and express high-level concepts like objects and types. While the lambda calculus provides none of these features explicitly, we will see how it can express many familiar programming concepts with just three constructs: functions, variables, and function application. By learning the lambda calculus--the theoretical underpinning of functional languages like Haskell and ML-- programmers can gain a deeper understanding of all programming languages.

Richard Townsend is a 6th year PhD student at Columbia University studying Programming Languages and Compilers under Stephen A. Edwards and Martha A. Kim. His research focuses on the use of functional languages and high-level optimizations to translate recursive algorithms with irregular memory access patterns into efficient hardware designs. This work revolves around his research group's current project: an optimizing Haskell-to-SystemVerilog compiler.