Cerrado . Esta pregunta está
basada en opiniones . Actualmente no acepta respuestas.
Comentarios
Respuesta
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 escondidos detrás de ellos. Cuando llegue a este punto y al siguiente 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 envío múltiple y un sistema avanzado de manejo de excepciones.
Entonces, ¿por qué no sólo aprender Common Lisp primero? Viniendo de un fondo procedimental y de programación orientada a objetos, 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 su disposición y usar la herramienta que sea mejor para la tarea en cuestión.
Comentarios
Responda
Y por favor.
Haskell le enseña lo más puro de FP, hasta donde yo sé al menos, al igual que Smalltalk enseña lo más puro de OO. (Menciono esto no para sugerir que OO y FP no puedan casarse, sino porque ambos lenguajes son lenguajes «joya», un idea central llevada al extremo.)
Lisp es realmente una familia de lenguajes, así que hablaré sobre Common Lisp porque ese es el miembro particular de la familia que utilizo.
Lisp todavía tendrá mucho que enseñarte:
- Es multiparadigma, así que como dsimcha señala , te lo mostrará cómo integrar FP con otros paradigmas.
- Lisp le enseñará que «código-es-datos, datos-es-código», por ejemplo a través de sus macros.
- CLOS es un marca muy interesante de OO, con herencia múltiple que funciona y funciones genéricas.
Respuesta
Haskell y Lisp son dos bestias totalmente diferentes.
Haskell es una especie de «programación funcional pura en una torre de marfil»
Lisp es una especie de «código-es-datos / datos-es-código / crea tus propias construcciones de lenguaje». Puede manipular su código de cualquier forma que pueda imaginar.
Son muy diferentes. Ambos comparten el aspecto de «programación funcional», pero ese es realmente un pequeño punto en común en comparación con sus diferencias. ¡Pruébelos y verá cuán diferentes son!
Comentarios
Respuesta
Aprender Lisp más adelante le permitirá personalizar Emacs, que posiblemente sea el editor de texto más avanzado disponible. No puede hacer eso en Haskell.
Comentarios
Responder
El principal beneficio que veo al aprender Lisp es aprender a integrar FP en un -lenguaje multiparadigma orientado al mundo, en lugar de solo aprenderlo en el contexto de un lenguaje académico que enfatiza la pureza.
Comentarios
Respuesta
También tengo experiencia en 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é Ocaml pero no llegué mucho más lejos con eso. Finalmente comencé a escuchar cosas buenas sobre Scala, lo probé y descubrí que me sentaba 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 enviar 161 Proyecto Euler problemas con él), Haskell parece tener mucho más sentido. De hecho, acabo de pedir un par de libros sobre Haskell y quiero intentarlo de nuevo, aunque esto está motivado en gran medida por la existencia de Scalaz.
Así que encontré el uso de un lenguaje de múltiples paradigmas (es decir, Scala, pero Lisp probablemente también encajaría en el proyecto de ley) una buena forma en FP. Pero si está feliz de sumergirse en Haskell (yo no lo estaba), hágalo.
Comentarios
Respuesta
Originalmente vengo de C / C ++ / Ruby y usé conceptos de FP en Ruby siempre que pude. El estado solo lastima un poco mi cerebro. Uno de mis amigos me llamó un día y me pidió que escribiera algo en Haskell (¡mi primer trabajo en Haskell, y con suerte no el último!). Aprendí rápidamente el idioma y armé algo que funcionó. No era hermoso ni nada, pero funcionó.
Me tomé un descanso 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 muy bien los fallos a través de un boxeo inteligente de valores. Hay tantas herramientas para trabajar con estas cajas que simplemente olvidas 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 igualar a Haskell, fuera de la gestión de la memoria. Haskell es igual de rápido (si no más rápido), significativamente más conciso y mucho más seguro. Pero la seguridad de Haskell nunca entra el camino.
TL; TR Haskell es un soplo de aire fresco, y Lisp es un Ruby un poco más funcional.