Actualmente codifico con C, C ++ y Python. Quiero aprender un lenguaje de programación funcional, y en este momento me estoy inclinando hacia Haskell. NO quiero comenzar una guerra "Haskell vs Lisp" aquí; Lo que quiero saber es esto: si aprendo a Haskell principalmente por la exposición a la programación funcional, ¿qué beneficios obtendré, si los hubiera, de aprender Lisp más tarde?
40
Respuestas:
Sugiero aprender ambos, Haskell primero, luego Common Lisp. Mi experiencia con Haskell fue que la escritura estática parecía ser una molestia restrictiva al principio, pero una vez que me acostumbré, noté que la mayoría de mis errores tipográficos tenían errores lógicos ocultos detrás de ellos. Cuando llegue a este punto, y al próximo hito, que es aprender a pensar en tipos y definir sus propios tipos como un medio para expresar su solución, estará listo para Common Lisp.
Con Common Lisp, puede agregar mónadas, curry y todo lo que le gustó de Haskell, pero también obtiene herencia múltiple como mencionó Frank Shearar, y funciones genéricas con despacho múltiple y un sistema avanzado de manejo de excepciones.
Entonces, ¿por qué no aprender primero Common Lisp? Viniendo de un procedimiento y antecedentes de OOP, mi experiencia ha sido que realmente no entendía la programación funcional hasta que tuve que usarla exclusivamente. Una vez que la programación funcional sea cómoda, puede agregar el resto de las herramientas que Common Lisp pone a disposición y usar la herramienta que sea mejor para la tarea en cuestión.
fuente
Y por favor.
Haskell te enseña lo más puro de FP, al menos que yo sepa, al igual que Smalltalk enseña lo más puro de OO. (Menciono esto no para sugerir que OO y FP no pueden casarse, sino porque ambos lenguajes son "gemas", una idea central llevada a extremos).
Lisp es realmente una familia de idiomas, así que hablaré sobre Common Lisp porque ese es el miembro particular de la familia que uso.
Lisp todavía tendrá mucho que enseñarte:
fuente
Aprender Lisp más adelante te permitirá personalizar Emacs, que posiblemente sea el editor de texto más avanzado disponible. No puedes hacer eso en Haskell.
fuente
Haskell y Lisp son dos bestias totalmente diferentes.
Haskell es una especie de "programación puramente funcional en una torre de marfil"
Lisp es una especie de "código-es-datos / datos-es-código / crea tus propias construcciones de lenguaje". Puedes manipular tu código de cualquier forma que puedas imaginar.
Ellos son muy diferentes. Ambos comparten el aspecto de "programación funcional", pero ese es realmente un pequeño punto común en comparación con sus diferencias. ¡Pruébalos y verás lo diferentes que son!
fuente
El principal beneficio que veo al aprender Lisp es aprender a integrar FP en un lenguaje multiparadigm orientado al mundo real, en lugar de aprenderlo solo en el contexto de un lenguaje académico que enfatiza la pureza.
fuente
También vengo de un fondo C / C ++ / Python y he probado FP un par de veces en los últimos años. Inicialmente miré a Haskell y no pude entenderlo, luego probé con Ocaml pero no fui mucho más lejos con eso. Finalmente comencé a escuchar cosas buenas sobre Scala, lo probé y descubrí que me quedaba muy bien (también había hecho un poco de Java en el pasado), hasta el punto de que después de un año de incursionar en Scala (y despachar 161) Project Euler tiene problemas con él), Haskell parece tener mucho más sentido. De hecho, acabo de pedir un par de libros sobre Haskell y quiero darle otra oportunidad, aunque esto está motivado en gran medida por la existencia de Scalaz.
Así que encontré que usar un lenguaje de paradigmas múltiples (es decir, Scala, pero Lisp probablemente también encajaría en la factura) es una buena forma de ingresar a la FP. Pero si eres feliz sumergiéndote en Haskell (no lo estaba), hazlo.
fuente
Originalmente provenía de un fondo C / C ++ / Ruby y usé conceptos de FP en Ruby siempre que pude. El estado me lastimó un poco el cerebro. Uno de mis amigos me llamó un día y me pidió que escribiera algo en Haskell (¡mi primer trabajo, y con suerte no el último, de Haskell!). Aprendí rápidamente el idioma y creé algo que funcionó. No era hermoso ni nada, pero funcionó.
Me tomé un descanso de un mes de Haskell porque no tenía nada para usarlo. Pero cuando decidí que necesitaba escribir mi propio software de blog, usé Haskell ( https://symer.io ). Haskell es realmente genial porque puede dividir un problema en partes e implementar estas partes de manera diferente según la entrada. Haskell también maneja las fallas extremadamente bien a través del boxeo inteligente de valores. Hay tantas herramientas para trabajar con estas cajas que simplemente olvida que existen.
Mi experiencia con lisp (Scheme) fue completamente negativa. El lenguaje no solo carecía de estas herramientas inteligentes y simples, sino que se sentía tan peligrosamente suelto como Ruby o JavaScript. Fue una experiencia horrible y no ofrece nada nuevo más allá de Ruby o Python.
C ++ no puede mantener una vela a Haskell, fuera de la administración de memoria. Haskell es igual de rápido (si no más rápido), significativamente más breve y mucho más seguro. Pero la seguridad de Haskell nunca se interpone.
TL; TR Haskell es un soplo de aire fresco, y Lisp es un Ruby un poco más funcional.
fuente