2010-02-01 24 views
18

Me gustaría aprender un lenguaje de programación funcional para ver un paradigma de programación diferente.¿Qué lenguaje de programación funcional debería elegir como primer lenguaje de programación funcional?

Mi formación en programación: Java (acabo de aprobar el examen SCJP), algunos rubíes y Rieles muy limitados. Uso bash para tareas básicas de administrador de sistemas. Yo uso Ubuntu 9.04.

Como segundo objetivo, me gustaría usar fp para mostrar a los niños (14-18 años) cómo se relacionan matemáticamente y cs. Los chicos son muy buenos en la programación (están aprendiendo Python y Java en la escuela politécnica desde el primer año). Sin embargo, como muestran las pruebas, tienen dificultades con las matemáticas esp. conceptos básicos de matemática discreta. Creo que podemos desarrollar sus habilidades matemáticas mediante el uso de la programación (y posiblemente ese sea el tema de la tesis de mi docencia). Creo que un lenguaje con un vocabulario muy básico serviría mejor a este proyecto.

+1

Los tres primeros (por número de votos) hablan de cuatro idiomas diferentes. Lo cual me dice por qué una pregunta como esa no suele ser tan útil. Además, dado que conoces a Ruby, que soporta fp hasta cierto punto, ¿por qué no utilizarlo para ampliar tu comprensión de los conceptos? Lo que suelo hacer al aprender un nuevo paradigma es escoger un idioma, trabajar en él por un tiempo (2/3 días) y pasar a otro si no me gusta por alguna razón. Y sí, tengo la opción de volver a abrirlo. YMMV. – dirkgently

+1

Comparar con http://stackoverflow.com/questions/744368/which-functional-programming-language-should-i-use que tiene todas las mismas respuestas y también las relacionadas http://stackoverflow.com/questions/927272/ what-is-the-best-functional-programming-language-for-experienced-oo-developers y http://stackoverflow.com/questions/1348896/what-is-the-best-functional-language-for-scientific- programación. Todavía no he votado para cerrar, pero no estoy seguro de que esto esté realmente agregando nada ... – dmckee

+0

Otro casi duplicado: http://stackoverflow.com/questions/779800 analiza media docena de idiomas funcionales diferentes de la perspectiva de un recién llegado; algunas personas parecen haberlo encontrado útil. –

Respuesta

10

Si su objetivo principal es trabajar con adolescentes, tiene sentido utilizar la pedagogía de lenguaje funcional y la tecnología que ha demostrado funcionar con adolescentes, y que es PLT Scheme (también conocido como DrScheme) con el libro How To Design Programs (también en línea gratis) Estos chicos obtuvieron excelentes resultados desde la escuela intermedia hasta la universidad del tercer semestre. Tienen resources for teachers también.

A muchos encuestados les gusta el SICP. Es un maravilloso libro — pero no a learn from. Si ya conoce Scheme, es un buen libro para admire, pero SICP trata menos acerca de la programación funcional y más acerca de cómo implementar todas las ideas conocidas de ciencia informática en Scheme.

Si su objetivo principal es aprender realmente nuevo paradigma de programación, entonces Esquema carece de algunas características que son muy importantes para muchos programadores funcionales:

  • Programación con coincidencia de patrones
  • Aplicación parcial de funciones al curry
  • Un sistema de tipo estático polimórfica
  • cálculo funcional Pure

Si desea ideas interesantes, intente Haskell; Haskell hace que sea mucho más difícil para usted programar sus viejos pensamientos en el nuevo idioma. En cambio, Haskell te obliga a pensar en nuevos pensamientos. Además de muchos otros recursos, Real World Haskell es gratis en línea.

Nota final: SO ha tenido muchos similar questions en el aprendizaje de la programación funcional.

+0

Esquema y cómo diseñar programas parece muy bueno. ¡Muchas gracias! – txxwq

16

voto por Haskell, que tiene las siguientes ventajas:

  • En Haskell, el caso simple es realmente sencilla
  • El caso complejo es (por lo general) siendo comprensible por mentes humanas ordinarias
  • Se tiene una sintaxis ordinaria que no es demasiado diferente de otros lenguajes de programación no funcionales (a diferencia, por ejemplo, Lisp)
+1

Sería el segundo y agregaría que tiene un [muy buen libro introductorio] (http://book.realworldhaskell.org/). – Yoric

11

Soy un gran admirador de Scheme, sobre todo porque el best book on it está disponible gratuitamente.

+1

SICP no es el mejor libro de Scheme, Little Schemer nee Little Lisper is. – HandyGandy

+0

De acuerdo, permítanme revisar mi declaración diciendo que uno de los mejores libros sobre ella está disponible gratuitamente. Y tengo que recoger una copia del Little Schemer. – Jon

8

Scala y Clojure ejecutan la JVM para que pueda estar más familiarizado con sus entornos.

+2

Dado el fondo ya existente en Java, estas son probablemente las opciones ideales. Si tuviera antecedentes de Microsoft, recomendaría F #. –

7

Probaría Scala. No es puramente funcional, te permite utilizar una variedad de enfoques, pero gran parte de tu conocimiento de Java debe ser portuario (está basado en JVM), incluidas las bibliotecas JDK, y es uno de los idiomas más avanzados que he visto en mi vida.

Si está interesado en aprender las características del idioma y ampliar su conocimiento de cómo funcionan los idiomas, no podría imaginar una mejor alternativa.

0

Dado que ya está familiarizado con Python, ¿por qué no simplemente utiliza sus capacidades funcionales? Para obtener más información, consulte este (draft) HowTo.

+0

Python es bastante deslucido como lenguaje funcional. Claro, es compatible con algunos elementos comunes que espera encontrar en un lenguaje funcional (cierres, funciones de primera clase e incluso funciones como 'map') pero eso no lo convierte en un lenguaje funcional. La programación funcional se trata más de un * estilo * que de elementos de lenguaje específicos, y Python no impone (o incluso fomenta) un estilo de programación funcional. Además, si está usando Python para tratar de enseñar programación funcional a los programadores existentes, es probable que solo utilicen los aspectos imperativos de Python como un atajo de todos modos. – mipadi

+0

Los chicos están familiarizados con Python, no yo. Pero leeré sus capacidades de fp porque creo que sería más fácil abordar un nuevo estilo con un lenguaje conocido. – txxwq

0

Mi pregunta es qué enfoque es el mejor para los adolescentes con los que está trabajando. Si están dispuestos a aprender algo nuevo y diferente, Scheme es una excelente opción como lenguaje funcional. Es tan básico como vienen. Si desea mantener una sintaxis más familiar, Haskell podría ser su respuesta.

0

Si está haciendo esto para aprender, entonces definitivamente Scheme con SICP. Va a ser difícil y frustrante y te dejará boquiabierto si no tienes experiencia con estas cosas, pero aprenderás mucho.

Si desea utilizar la programación funcional en la práctica, vale la pena mirar F #, Scala y Clojure.

1

Mi voto va para Scala o F #, que se pueden descargar de forma gratuita en este momento.

La ventaja aquí es que son lenguajes de paradigma mixto - Nativamente son lenguajes funcionales, pero también puede usar programación imperativa y orientada a objetos. También tienen grandes bibliotecas estándar: Scala monta en la parte posterior de Java y F # tiene todas.NET, para que pueda programar algo interesante con bastante rapidez.

Scheme y Haskell son lenguajes funcionalmente puros, pero lamentablemente sus bibliotecas estándar son relativamente pequeñas, por lo que es difícil hacer cosas relativamente comunes, como analizar XML o escanear páginas web.

Cuestiones relacionadas