El cálculo lambda es un sistema formal diseñado para explorar la definición de funciones, las aplicaciones, y la Recursividad. Esto genera un nuevo Paradigma Funcional.
5 + 3 * 2 // Expresión reducible (redex)
5 + 6 // Reducción a una expresión equivalente
11 // Expresión irreducible
Sea la reducción de manera que cada aparición de en la expresión se sustituye por . Existe un conjunto de Reducciones Lambda.
Es común escribir el operador siempre al frente, antes de los argumentos:
+ 5 (* 3 2)
+ 5 6
11
El cálculo lambda nos permite definir funciones de un solo argumento: (por ejemplo ) y aplicarlas mediante , siendo un argumento (por ejemplo .
Sintaxis
El cálculo lambda es una Gramática Libre de Contexto.
<expr> ::= <const>
| <var>
| (λ <var>.<expr>)
| (<expr> <expr>)
Convenciones:
- La aplicación es asociativa por la izquierda: .
- La abstracción es asociativa por la derecha: .
- La aplicación es prioritaria sobre la abstracción: .
- Se puede suprimir símbolos en abstracciones consecutivas: .
El alcance de una variable es la porción de la expresión donde el identificador es accesible. Una variable puede estar:
- Ligada: si aparece en el ámbito de una variable instanciable.
- Libre: si una expresión tiene ocurrencias que no están ligadas.
Ej: en las variables e están ligadas, pero la está libre.