math - programacion - ¿Qué tan útil es conocer el cálculo lambda?
lambda significado (11)
A todas las personas que conocen el cálculo lambda : ¿Qué beneficio te ha traído, con respecto a la programación? ¿Recomendarías que las personas lo aprendan?
Creo que el uso del cálculo lambda con respecto a la programación en la práctica es que es un sistema bastante minimalista que captura la esencia de la abstracción (o "funciones anónimas" o cierres, si se quiere). Aparte de eso, no creo que sea generalmente esencial, excepto cuando necesites implementar la abstracción por ti mismo (como se menciona en 114646 ( 114646 )).
También estoy completamente en desacuerdo con Denis Bueno ( 114701 ) que dice que es esencial para la programación funcional. Es perfectamente posible definir, usar o comprender un lenguaje funcional sin ningún cálculo lambda en absoluto. Para comprender la evaluación de los términos en los lenguajes funcionales (que, en mi opinión, contradice de algún modo el uso de un lenguaje funcional) lo más probable es que sea mejor aprender sobre los sistemas de reescritura de términos.
Descubrí que el cálculo Lambda era útil para entender cómo funcionaba la programación funcional en un nivel más profundo. Especialmente cómo implementar lenguajes funcionales.
Me ha facilitado la comprensión de conceptos avanzados como los sistemas de tipos y las estrategias de evaluación (por ejemplo, llamar por nombre versus llamar por valor).
No creo que haya que saber nada sobre el cálculo Lambda para usar técnicas básicas de programación funcional. Sin embargo, la comprensión del cálculo lambda facilita el aprendizaje de la teoría de programación avanzada .
El beneficio del cálculo lambda es que es un modelo de computación extremadamente simple que es equivalente a una máquina de Turing. Pero mientras que una máquina de Turing se parece más al lenguaje ensamblador, el cálculo lambda es más como un lenguaje de alto nivel. Y si aprendes codificaciones de la Iglesia que te ayudarán a aprender la técnica de programación llamada estilo de continuación y paso , que es bastante útil para implementar la búsqueda de rastreo y otros trucos ingeniosos.
El principal uso del cálculo lambda en la práctica es que es una gran herramienta de laboratorio para estudiar nuevas ideas de lenguaje de programación . Si tiene una idea para una nueva función de idioma, puede agregar la nueva función al cálculo lambda y obtendrá algo lo suficientemente expresivo como para programarlo, a la vez que será lo suficientemente simple como para estudiarlo a fondo . Este uso es realmente más para diseñadores de lenguaje y teóricos que para programadores.
El cálculo Lambda también es muy bueno por sí mismo: al igual que conocer el lenguaje ensamblador, profundizará su comprensión de la computación . Es especialmente divertido programar una máquina de turing universal en el cálculo lambda. Pero esto es matemáticas fundamentales, no programación práctica.
El cálculo lambda es un modelo computacional, como la máquina de turing. Por lo tanto, es útil si necesita implementar un determinado evaluador para un lenguaje basado en este modelo, sin embargo, en la práctica, solo necesita la idea básica (¿colocar el argumento semánticamente correcto en el cuerpo de una función?) Y eso es todo eso.
Estoy de acuerdo con aquellos que dicen que es teóricamente posible aprender programación funcional sin aprender el cálculo lambda, pero ¿cuál es la ventaja de no aprender el cálculo lambda? No es como si tomara una gran inversión de tiempo.
Lo más probable es que te ayude a comprender mejor la programación funcional. Pero incluso si no lo hace, sigue siendo algo genial que vale la pena aprender. El Y-combinator es una belleza.
Los beneficios para mí son una programación sinérgica más compacta. Las cosas tienden a fluir horizontalmente más que verticalmente. Además, es muy útil para crear prototipos de algoritmos simples. No sé si lo estoy usando en todo su potencial, pero lo encuentro muy útil.
Para ser sincero, aprender cálculo lambda antes de la programación funcional me ha hecho darme cuenta de que los dos están tan poco relacionados como C con cualquier programación imperativa.
El cálculo lambda es un lenguaje de programación funcional, uno esotérico, un tarpit de Turing si se quiere; accidentalmente también es el primero.
La mayoría de los lenguajes de programación funcionales no requieren que ''aprendas'' cálculo lambda, sea lo que sea lo que signifique, el cálculo lambda es increíblemente mínimo, puedes ''aprender'' sus axiomas en menos de una hora. Para conocer los resultados, como el teorema del punto fijo, el Teorema de Church-Rosser, etc., es irrelevante para la programación funcional.
Además, las abstracciones lambda a menudo se consideran "funciones", no estoy de acuerdo con eso, son algoritmos, no funciones, una diferencia menor, la mayoría de los "lenguajes funcionales" tratan sus funciones más de la forma en que lo hacen las matemáticas clásicas.
Sin embargo, para usar Haskell de manera efectiva, es necesario que entienda ciertos sistemas de tipo , independientemente del cálculo lambda, el sistema tipo System F se puede aplicar a todas las "funciones" y no requiere abstracciones lambda en absoluto. Comúnmente en matemáticas decimos f: R ^ 2 -> R: f (x) = x ^ 2. Podríamos haber dicho: f (x) = x ^ 2 :: R -> R -> R. De hecho, Haskell se acerca bastante a esta notación.
El cálculo lambda es un formalismo teórico, las funciones de Haskell no son realmente más abstracciones lambda que f: f (x) = x ^ 2 realmente, lo que hace que las abstracciones lambda sean interesantes es que nos permite definir lo que normalmente se ven como "constantes" como ''funciones'', ningún lenguaje funcional hace eso debido a la gran sobrecarga computacional. Haskell y similares son solo una forma restringida del sistema de tipos del Sistema F aplicado a las funciones utilizadas en las matemáticas clásicas de todos los días. Las funciones en Haskell ciertamente no son los solicitantes anónimos de reducción formalmente simbólicos, ya que están en el cálculo lambda. La mayoría de los lenguajes de programación funcionales no son sistemas simbólicos de reescritura basados en reducción. Los Lisps son hasta cierto punto, pero eso es un paradigma en sí mismo y su ''palabra clave lambda'' realmente no satisface llamarlo cálculo lambda.
Si desea programar en cualquier lenguaje de programación funcional , es esencial. Quiero decir, ¿qué tan útil es saber sobre las máquinas de Turing? Bueno, si escribe C, el paradigma del lenguaje está bastante cerca de las máquinas de Turing: tiene un puntero de instrucción y una instrucción actual, y la máquina realiza alguna acción en el estado actual y luego avanza lentamente hasta la próxima instrucción.
En un lenguaje funcional, simplemente no puedes pensar así, ese no es el paradigma del lenguaje. Tienes que pensar en el cálculo lambda y cómo se evalúan los términos allí. Será mucho más difícil para usted ser eficaz en un lenguaje funcional si no conoce el cálculo lambda.
Si solo quieres ser un técnico y escribir programas para hacer cosas, entonces realmente no necesitas saber lambda-cálculo, máquinas de estado finito, autómatas pushdown, expresiones regulares, gramática libre de contexto, matemáticas discretas, etc.
Pero si tiene curiosidad sobre los misterios más profundos que subyacen a este asunto, puede comenzar a preguntarse cómo se pueden responder estas preguntas. Los conceptos son hermosos y ampliarán tu imaginación. También creo que, por cierto, hacen que uno sea un mejor practicante.
Lo que me enganchó fue el libro de Minsky Computation: Finite and Infinite Machines.
También me gustaría mencionar que si estás haciendo algo en el área de PNL, el cálculo lambda está en la base de un cuerpo masivo de trabajo en la semántica de la composición.
Una forma posible de aprender cálculo lambda es
http://en.wikipedia.org/wiki/Lambda_Calculus
O, si quieres más, aquí está mi blog dedicado al cálculo lambda y cosas así
http://weblogs.manas.com.ar/lziliani/
Como cada abstracción de cálculos, con el cálculo lambda puede modelar material utilizado en la mayoría de los lenguajes de programación, como la subtipificación. Para más información sobre esto, uno de los mejores libros con usos prácticos del cálculo lambda en este sentido es