Haskell AND Lisp vs. Haskell OR Lisp [cerrado]

40

Actualmente codifico con C, C ++ y Python. Tengo ganas de 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 Haskell principalmente por la exposición a la programación funcional, ¿qué beneficios, si los hay, obtendré al aprender más adelante Lisp?

    
pregunta Zeke 13.11.2010 - 18:33

7 respuestas

58

Sugiero aprender ambos, primero Haskell, 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 de tipo tenían errores lógicos que se escondían 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 de expresar su solución, estará listo para Common Lisp.

Con Common Lisp, puede agregar mónadas, currys y todo lo que le ha gustado de Haskell, pero también obtiene herencia múltiple como la que se menciona a Frank Shearar, y funciones genéricas con múltiples despachos y un avanzado sistema de manejo de excepciones.

Entonces, ¿por qué no aprender primero Common Lisp? Con antecedentes en procedimientos y OOP, mi experiencia ha sido que no entendí realmente 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 mejor se adapte a la tarea en cuestión.

    
respondido por el Larry Coleman 13.11.2010 - 20:43
31

Y por favor.

Haskell te enseña lo más puro de FP, que yo sepa, 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 idiomas son lenguajes "gem", una idea central llevada a los 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:

  • Es multiparadigm, por lo que dsimcha señala hacia fuera le 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 una marca muy interesante de OO, con herencia múltiple que funciona y funciones genéricas.
respondido por el Frank Shearar 13.11.2010 - 19:05
11

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.

    
respondido por el user1249 13.11.2010 - 19:42
11

Haskell y Lisp son dos bestias totalmente diferentes.

Haskell es algo así como "programación funcional pura en una torre de marfil"

Lisp es algo así como "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.

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. ¡Solo pruébalos y verás cuán diferentes son!

    
respondido por el dagnelies 10.09.2011 - 20:35
7

El principal beneficio que veo al aprender Lisp es aprender a integrar FP en un lenguaje multiparadigm orientado al mundo real, en lugar de solo aprenderlo en el contexto de un lenguaje académico que enfatiza la pureza.

    
respondido por el dsimcha 13.11.2010 - 18:49
5

También provengo de un fondo de 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 conseguí mucho más con eso. Finalmente, comencé a escuchar cosas buenas sobre Scala, lo probé y encontré que me fue 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 mensajes). El proyecto Euler tiene problemas con él), parece que Haskell tiene mucho más sentido. De hecho, acabo de ordenar un par de libros sobre Haskell y quiero intentarlo de nuevo, aunque esto está motivado en gran medida por la existencia de Scalaz.

Encontré que usar un lenguaje de paradigmas múltiples (es decir, Scala, pero Lisp probablemente también encajaría) sería una buena forma de entrar en FP. Pero si eres feliz buceando en Haskell (no lo estaba), hazlo.

    
respondido por el timday 14.11.2010 - 01:43
2

Originalmente provenía de un fondo C / C ++ / Ruby y usaba conceptos de FP en Ruby siempre que podía. Estado sólo un poco lastimar mi cerebro. Uno de mis amigos me llamó un día y me pidió que escribiera algo en Haskell (¡mi primer trabajo de Haskell (y, con suerte, no el último)!). Aprendí rápidamente el idioma y junté algo que funcionó. No era hermoso ni nada, pero funcionó.

Tomé un mes de descanso de Haskell porque no tenía nada para usar. Pero cuando decidí que necesitaba escribir mi propio software de blog, usé Haskell ( enlace ). Haskell es realmente bueno 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 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 ofrecerle 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 terso y mucho más seguro. Pero la seguridad de Haskell nunca se interpone en el camino.

TL; TR Haskell es un soplo de aire fresco, y Lisp es un Ruby un poco más funcional.

    
respondido por el Nate Symer 21.04.2015 - 19:17

Lea otras preguntas en las etiquetas