Cómo el cálculo lambda permite crear un lenguaje de programación desde cero

Fuentes: 7 lines of code, 3 minutes: Implement a programming language from scratch

El cálculo lambda es un sistema formales mínima desarrollado por Alonzo Church en 1929 que constituye la base teórica de todos los lenguajes de programación funcionales modernos como Haskell, Scheme y ML, y también está presente en lenguajes imperativos como JavaScript, Python y Ruby. A pesar de su aparente simplicidad, este lenguaje posee solo tres tipos de expresiones: referencias a variables, funciones anónima (escritas con notación λv.e) y llamadas a funciones (escribiendo dos expresiones adyacentes), pero mediante técnicas avanzadas como las Codificaciones Church y el Combinador Y, logra ser Turing-equivalente, es decir, puede calcular cualquier función que una máquina de Turing pueda calcular. El artículo demuestra cómo implementar un intérprete funcional del cálculo lambda en solo 7 líneas de Scheme, utilizando las funciones eval y apply: eval procesa expresiones y las evalúa contra un entorno que mapea variables a valores, mientras que apply toma una función y un argumento para ejecutar la función. La implementación usa 'closures' (clausuras) que empaquetan una expresión lambda con su entorno para definir las variables libres de términos abiertos. Se presentan ejemplos desde la función identidad hasta el enigmático programa Omega que no termina de ejecutarse. Finalmente, se muestra cómo escalar este diseño para interpretar un sublenguaje completo de Scheme con expresiones como variables, constantes numéricas y booleanas, operaciones primitivas, conditionals (if), bindings (let/letrec), mutación (set!), secuenciación (begin), definiciones de funciones y definiciones globales. Este enfoque denotacional basado en entornos demuestra que con poche de código es posible crear intérpretes para lenguajes de programación completos, sentando las bases para entender cómo funcionan interpretadores y compiladores en general.