Comenzaré un curso universitario de ciencias de la computación el próximo otoño, pero realmente no puedo entender el cálculo λ en el contexto de la programación funcional. Puedo estar malinterpretando esto por completo, pero según esta definición de la Enciclopedia de Filosofía de Stanford, es solo otra notación para las funciones.
Si es solo eso, ¿por qué es ventajoso usar el cálculo λ sobre las anotaciones de funciones regulares para calcular el tiempo de ejecución del algoritmo?
Respuestas:
En informática queremos analizar y comprender el código fuente con rigor matemático. Esa es la única forma de probar propiedades interesantes (como la terminación) con absoluta certeza. Para eso necesitamos un lenguaje con un significado muy bien definido para cada construcción.
En teoría, este podría ser cualquier lenguaje con una buena semántica formal . Pero para hacer las cosas menos complicadas y menos propensas a errores, es mejor usar un lenguaje que sea lo más simple posible pero que sea capaz de expresar cualquier programa (es decir, que Turing esté completo ). Para razonar sobre el código imperativo, hay máquinas de Turing . Pero para razonar sobre la programación funcional, existe el cálculo .λ
El cálculo básico es como un lenguaje de programación funcional, pero con una gran cantidad de 'equipaje' eliminado. No es importante que este sea un buen lenguaje para escribir programas, ni que sea un lenguaje eficiente. Solo que es simple y expresivo. Por ejemplo, no necesitamos bucles, porque podemos simularlos con recursividad. Y no necesitamos funciones con múltiples parámetros, ya que podemos simularlos con Curry .λ
Ahora, en algún momento es posible que desee probar propiedades sobre construcciones que no son parte del cálculo básico (sin tipo) . Es por eso que los informáticos lo han extendido en diferentes direcciones a lo largo de los años. Por ejemplo, para razonar sobre los sistemas de tipos, hay muchas variaciones de tiposλ -calculiλ .
fuente
Hay muchas ventajas al usar Lisp o la programación funcional y el cálculo del tiempo de ejecución del algoritmo es solo una posibilidad (aunque sería útil si citara una referencia para eso). dado que ya está en notación funcional, a veces determinar las fórmulas para el tiempo de ejecución mediante inducción o relaciones de recurrencia puede tener una relación más fuerte o más obvia con el código original. También se simplifican otros tipos de análisis del algoritmo.
Otra ventaja principal es la simplicidad sintáctica. Los analizadores para otros idiomas son muy complejos, pero los analizadores Lisp son muy simples. entonces Lisp es un gran lenguaje para estudiar la teoría del análisis.
Otro aspecto clave es analizar el software más desde un punto de vista lógico o matemático. perspectiva / visión perspectiva "científica de la computación".
Como señala la otra respuesta, Lisp tiene que ver con la recursividad en lugar de la iteración y la recursión está muy en el corazón de CS.
[1] Estructura e interpretación de programas de computadora, por Abelson y Sussman
fuente