Pregunta

¿Es posible fuerza F # para comportarse como un lenguaje funcional puro como Haskell ? Tal vez el uso de algunas directivas del compilador?

PD: ya que vengo de un fondo de C / C ++, quiero obligarme a aprender la programación funcional sin tener que aprender Haskell:)

¿Fue útil?

Solución

No se puede forzar este comportamiento en C #, pero como dijo Brian disciplina es su mejor amigo. P.ej. no utilice mutable, bucles o for while, palabras clave ref, etc. También se adhieren a las estructuras puramente inmutables de datos (unión discriminada, lista, tupla, mapa, etc.). Si lo que necesita hacer IO en algún momento, el arquitecto de su programa de forma que se separan de su código puramente funcional.

No se olvide de la programación funcional es todo acerca de la limitación y el aislamiento de los efectos secundarios.

Otros consejos

No, lo siento. Sólo tienes que usar la disciplina.

Si eres como yo, es probable que evitar el 'bueno' si no se fuerza a utilizar Haskell en lugar de F # y el uso Haskell como idiomáticamente como sea posible. El uso de tipos de datos algebraicos en lugar de objetos, aprender a amor la pereza, abrazando la mónada, y más son mucho más de una pieza de la base de Haskell, y podría decirse que algunos de los puntos más finos (en mi opinión) de la programación funcional pura.

F # no tiene tan empinada curva de aprendizaje de muchas maneras, pero que suena como que está aprendiendo por diversión, ¿por qué no acepta el reto de todos modos? Puedo dar fe de que el paso a F # después de usar Haskell le puede dar una mejor idea de cómo F #, en general debería para utilizar de todos modos.

Para la reflexión.

Los aspectos puramente funcionales de Haskell son fundamentales para el idioma. No se puede simplemente trasplantarlo entre las lenguas. Esto lleva a las principales decisiones de diseño - por ejemplo, la naturaleza puramente funcional de Haskell llevó a la invención de la mónada IO. F # no tiene una "válvula de escape" tal para el cálculo con estado.

Además, aprender a programar en un lenguaje de programación funcional que soporta, pero no absolutamente hacerla cumplir podría realmente ser instructiva. Muchas personas se confunden entre las decisiones individuales de diseño de Haskell (por ejemplo, la mónada IO, para golpear el gran ejemplo de nuevo) y cómo funciona la programación funcional en general.

En resumen: No, no puede este. Pero lo que puede hacer es mirar con mucho cuidado y pregunta todo lo que hace que implica el mantenimiento de las operaciones estatales y secuenciación para asegurarse de que no es una abstracción más pura que se está perdiendo.

No. Actualmente F # compilador no puede hacer esta comprobación.

¿Por qué no empezar a escribir un programa C # para aprender programación funcional? Sé que algunas personas que aprendieron ML / Ocaml / F # primero y luego se trasladó a Haskell.

A continuación, tendrá una mejor comprensión de la pureza. (Si realmente no ha tocado cualquier lenguaje de programación funcional antes, su comprensión de pura funcional podría ser superficial.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top