2008-11-01 22 views
12

Últimamente he estado investigando y jugando con la programación funcional, únicamente para ampliar mi pensamiento sobre la programación, porque me resulta difícil "funcionalmente".Programación funcional: Mejor plataforma/Entorno

He descargado Glasgow Haskell y experimenté con eso.

Lo que me pregunto es, ¿cuál es la mejor plataforma para que Windows experimente con FP? Preferiría un enfoque basado en JVM, pero otra publicación en SO ha indicado que no se puede implementar un lenguaje FP real en la JVM debido a la falta de soporte para la recursividad final. ¿Lo que usted dice?

EDITAR: Como ya he dicho, he experimentado bastante con Haskell; siguiendo el consejo de una de las respuestas, he estado revisando el sitio web de Scala. Mirando los ejemplos de Scala, el código parece más "familiar" (mis antecedentes son C y Java), pero parece decididamente más OO/procedural y menos funcional. Una gran ventaja de Scala sería que me da otra herramienta de lenguaje para usar junto con Java y podría convertirse en otra flecha en mi carcaj profesional actual, en lugar de ser solo un ejercicio de aprendizaje. Cuando llegue más lejos en Scala, ¿los aspectos funcionales se volverán más predominantes, o tenderé a terminar simplemente escribiendo código OO con alguna influencia funcional? En otras palabras, ¿desafiará Haskell mis ideas preconcebidas más duro y más rápido que Scala?

+0

* Preferiría un enfoque basado en JVM, pero otra publicación en SO ha indicado que no se puede implementar un lenguaje de FP real en la JVM * No confíe en esta BS. Hay lenguajes funcionales de todo tipo en la JVM: Scala, Clojure (lispy), Yeti (ML-ish) y Frege, que es un lenguaje funcional puro y no estricto que apunta a la compatibilidad con Haskell. Entonces, Haskell es una buena opción para aprender, y puedes aplicar las cosas más tarde a la JVM con Frege. – Ingo

Respuesta

11

Si realmente quieres aprender a pensar de una manera funcional, Haskell es definitivamente la opción correcta. Casi todos los demás idiomas que existen te permiten deslizarte a un estilo imperativo con demasiada facilidad. Haskell te forzará a una mentalidad funcional. Esto me pareció indispensable al aprender. (Ciertamente puede ser más disciplinado que yo, por supuesto, pero ¿por qué impulsar su suerte?)

Cuando esté satisfecho con lo que ha aprendido de Haskell (¡será mucho!), Está listo para salir y evaluar lenguajes funcionales más liberales como Clojure o Scala. O puedes quedarte con Haskell, cuya situación en la biblioteca tampoco es realmente tan mala. En ese punto, es una cuestión de circunstancia y preferencia personal.Pero para hacer esa elección, haber aprendido a pensar de una manera funcional "pura" primero es, creo, vital.

3

Mire Scala. Se dirige a la JVM, interopera con Java y tiene muchas características de programación funcional de última generación.

+0

Kiwi, en respuesta a su EDIT, estoy de acuerdo con los comentarios de Matthias Benkard sobre el peligro de caer en un estilo imperativo. Si quieres ser desafiado, Haskell es una muy buena opción. –

7

Recomiendo PLT Scheme y SICP. El lenguaje es tan simple que puede acceder a los conceptos importantes muy rápidamente.

12

Echa un vistazo F#. El CLR tiene una instrucción .tail para que pueda escribir el código F # con las llamadas finales que no causan un StackOverflow (la excepción, no el sitio web). Here es un video introductorio sobre F # de PDC.

3

I amor usando Haskell y GHC. GHC incluye un intérprete interactivo (GHCI) y tiene mensajes de error maravillosamente útiles. Además, Haskell es uno de los mejores ejemplos de un lenguaje verdaderamente funcional, y no demasiado malo para usar una vez que experimentas con él un poco. Además, tiene un increíble sistema de tipo .

0

Alguna vez has probado Prolog? ... que va a

?- bend(your_mind). 
Yes 


?- bend(X). 
X = your_mind 

me dio una nueva perspectiva de todos modos ... plentyinfooutthere

+0

esto no es programación funcional, no creo. – Claudiu

+0

Prolog es un lenguaje de programación lógica, relacionado con, pero no un lenguaje funcional. –

5

También se fijan en Clojure.

+0

Gracias; aunque Lisp es uno de esos idiomas cuya forma básica simplemente me irrita por alguna razón. –

+0

Kiwi: Yo solía pensar de la misma manera, pero después de darle un intento serio a Common Lisp, miré hacia atrás y pensé, "¿por qué no hice esto antes?" No recomiendo un Lisp como un lenguaje en el que para aprender FP, sin embargo (ver mi respuesta). Los méritos de Lisp están en otro lado. –

5

En otras palabras, ¿desafiará Haskell mis ideas preconcebidas más duro y más rápido que Scala?

Sí.

Si realmente desea aprender, salga de su zona de confort.

¿Realmente va a utilizar Scala para el código de producción en los próximos 3 meses, de todos modos?

6

De ninguna manera Scala va a hacer que su mente se concentre tanto como Haskell. La razón principal para elegir Scala sobre Haskell cuando se aprende FP es darse una introducción más suave a las peligrosas tierras salvajes de mónadas, funcionadores y bondad de orden superior. Scala es genial si vienes de un fondo orientado a objetos tratando de convertir ese conocimiento en tierra funcional. No es tan bueno si quieres sumergirte de cabeza en la parte más profunda.

Dado lo que estás preguntando, recomendaría GHC Haskell. Nada va a deformar tu cabeza tanto como eso. :-) Dicho esto, creo que deberías vigilar a Scala. Hay muchos aspectos del lenguaje que son positivamente únicos, particularmente su sistema de tipos (subtipos estructural + nominal == dulce). No va a dolerle la cabeza tanto como a Haskell, pero le dará una idea de algunos conceptos que quizás no encuentre en ningún otro lado, particularmente la metodología llamada "programación tipográfica".

Ah, y para responder a la segunda parte de su pregunta (FP vs OO en Scala), tiendo a escribir mi código en un estilo funcional dentro de un marco orientado a objetos. Es un poco difícil de describir, pero así son las cosas. Piense en ello como diseñar una API desde un punto de vista orientado a objetos pero implementando todo en un estilo funcional. Mantengo las cosas inmutables y paso mucho tiempo usando métodos de orden superior, pero lo hago todo dentro de los límites de la herencia y el subtipado nominal convencional. De vez en cuando, todavía escribiré algo imprescindible, pero solo cuando sea más limpio hacerlo que usar el estilo funcional.

Cuestiones relacionadas