c# - F#vs Haskell vs Lisp: ¿qué idioma aprender?
language-comparisons (9)
¿Por qué elegir? Aprende tanto Lisp como Haskell por tu cuenta. Sin embargo, no tiene sentido aprender F # en tu tiempo libre. Si lo necesita para el trabajo, lo aprenderá en el trabajo;)
EDITAR: El chico estaba mirando el idioma para aprender por diversión. Bueno, Lisp y Haskell son buenos candidatos, ya que la diversión es todo para lo que van a ser utilizados (sin trabajos remunerados). Él "podría" (aunque es poco probable) tener la oportunidad de usar F # en el trabajo (está en MS shop), entonces ¿por qué aprender algo en el tiempo libre cuando se le puede pagar aprendiéndolo en el trabajo?
He oído mucho sobre los lenguajes de programación funcionales y estoy dispuesto a aprender uno. Supongo que será principalmente por diversión, sin embargo, espero que mejore mis habilidades de programación.
Tengo más de C # / .NET de fondo, así que mi primera opción es aprender F # (debido a .NET y familiaridad con Visual Studio). Por otro lado, me pregunto si F # tiene características como las macros Lisp o las funciones de orden superior de Haskell.
¿Podrían comparar F #, Haskell y Lisp? ¿Cuál será el idioma de tu elección?
Actualmente estoy viendo these videos en el Canal 9 sobre los aspectos básicos de la programación funcional. Se explica con Haskell, pero los conceptos básicos se aplican a todos los idiomas. Debo decir que es muy informativo y fácil de entender.
Aprendí todas ellas en diferente grado, y aconsejaría comenzar con Scheme (un dialecto Lisp), simplemente porque es más fácil de aprender. Haskell y F # están tipificados de forma estática, lo que es una gran ventaja para los proyectos de la vida real, pero en mi humilde opinión tienen una pequeña sintaxis "excesiva" y no son tan fáciles de recoger como Scheme.
Hay una buena implementación de Scheme para .NET - IronScheme. Puedes echar un vistazo a mi artículo " Playing with IronScheme " para ver si te gusta.
Esta es una pregunta muy subjetiva.
Mi opinión es que Scheme (una variante de Lisp) y que lee SICP es lo correcto. Aprenderás mucho.
Pero para fines prácticos y si eres un desarrollador de .NET, entonces tal vez F # es mejor.
F # es mi idioma de elección, pero recomiendo aprenderlos todos. Todos ellos son bastante diferentes e interesantes por derecho propio. Aquí hay una vista general rápida de cada uno (con un ligero sesgo F # tal vez), puede encontrar más información buscando en Google:
F # - es un lenguaje que facilita la programación en el estilo funcional, le permite copiar objetos fácilmente en lugar de mutarlos. También le proporciona tipos de datos interesantes, como tuplas y tipos de datos algebraicos, construcciones de lenguaje útiles como la coincidencia de patrones y la comprensión de listas. También tiene características obligatorias e imperativas y un buen acceso a las bibliotecas, ya que puede usar cualquier componente de .NET Framework.
Haskell - es un lenguaje funcional puro y perezoso, que hace una bestia rara o incluso única. Esto significa que no hay efectos secundarios en absoluto, a menos que sean rastreados por una mónada. Haskel también tiene tuplas, datos algebraicos y coincidencia de patrones.
Lisp: mientras que F # y Haskell están tipados estáticamente, lisp se tipea dinámicamente. Tiene una sintaxis distintiva que usa muchos paréntesis y proporciona una macro característica interesante que le permite realizar transformaciones en el programa y extender la sintaxis.
Nadie realmente respondió esta pregunta específica: "Me pregunto si F # tiene características como las macros Lisp o las funciones de orden superior de Haskell".
F # no ofrece macros. Además, no ofrece tipos de mayor nivel (que es lo que pensé que estabas preguntando al principio).
F # ofrece funciones de orden superior en las que puede escribir fácilmente una función que toma una función y devuelve una función. De hecho, C # (o realmente cualquier lenguaje .NET) puede hacer esto ya que el delegado Func
es parte del framework .NET.
No sé F #, pero a veces me gusta jugar con eso. Mi lenguaje es Clojure, que es muy funcional y funciona también en CLR, pero la versión de JVM es la principal.
Te supera muchas de las cosas que quieres. La principal diferencia con F # es que Clojure está tipeado dinámicamente y tiene una buena manera de manejar la concurencia (una de las mejores que diría).
Por cierto. ¿Sabías que F # se fabricó porque a Haskell le era difícil correr en el CLR? (Esa no es toda la historia, por supuesto, pero es parte de ella)
Si comparamos estos tres idiomas, recomendaré Haskell. Es más práctico que LISP, creo (porque es un sistema de tipos) y más poderoso e inteligente que F #. Por lo que usted sabe, F # es un puerto .NET de OCaml y hasta cierto punto no es ideoligalmente claro como es Haskell o como OCaml. Le recomendaré que estudie Haskell u OCaml para saber qué tan inconviniente es F #.
Tuve la misma pregunta una vez
Desde entonces, he hecho algo de programación en F #. Ahora estoy muy contento de haberlo hecho, ya que es realmente útil entender LINQ en C # y eso también fue mi experiencia. (Casi nunca uso foreach en C # ahora desde que aprendí F #)
Aprendí a través de F # muchas cosas sobre evaluación, listas y secuencias perezosa, todas las cuales puedes elegir cualquier idioma con buen soporte para listas, tuplas, etc. (como cualquier lenguaje funcional, supongo), pero si eliges F # , todo esto será muy útil en C # también. Tal vez ya conozcas todo esto y lo uses bien, pero en caso de que no lo hagas, elige F #.
Empecé here : un muy buen video tutorial, muy impresionante y un tutor muy inspirador.