En el espíritu de los otros errores comunes en las preguntas, ¿cuáles son los errores más comunes que cometen los programadores Haskell? Me he enseñado a mí mismo Haskell por un tiempo y estoy empezando a sentirme lo suficientemente cómodo con el idioma para comenzar a aplicarlo en el mundo real.Errores comunes de programación para los desarrolladores de Haskell para evitar?
Respuesta
El error más común que conozco es la introducción de una fuga de espacio a través de la evaluación perezosa. Hay muchas maneras de lograr este error, pero uno que especialmente programa a los programadores con otra experiencia de programación funcional es poner un resultado en un parámetro de acumulación, pensando que el parámetro de acumulación tomará un espacio constante. En muchos casos, el parámetro de acumulación requiere espacio lineal porque los parámetros no se evalúan.
Otro error común es olvida que let
es siempre recursivo. Una involuntaria
let x = ... x ...
puede conducir a desconcertante resultados.
La mayoría de las otras malas experiencias comunes se manifiestan no como errores sino como problemas para que los programas superen el comprobador de tipos o para que no comprendan el modelo de E/S monádicas. Las dificultades con la lista de comprensiones y con las anotaciones do
ocurren ocasionalmente.
En general las dificultades que tienen los programadores principiantes Haskell incluyen
- lengua grande con muchos rincones oscuros, especialmente en el sistema de tipos
- programas problemas para compilar, sobre todo cuando lo hacen de E/S
- Haciendo todo en el
IO
mónada - gran dificultad para predecir el comportamiento en el tiempo y en el espacio de los programas funcionales perezosos
Un error común para comenzando Programadores Haskell es forget the difference between constructor and type namespaces. Ese fue el error de un principiante que me avergüenza tener mi nombre asociado, pero estoy bastante seguro de que otros tropezarán con esa respuesta cuando tengan un problema similar, por lo que también puede mantenerlo ahí.
La diferencia entre []
y [[]]
: la lista vacía y la lista con 1 elemento, es decir, la lista vacía. Este especialmente aparece en casos base de funciones recursivas.
Utilice funciones recursivas no rectas o pliegues no estrictos que se producen para el desbordamiento de la pila.
Esto es menos cierto en Haskell que en otros lenguajes funcionales. Gran parte del tiempo, la pereza hace que las versiones de funciones que no son de cola sean una mejor opción (por ejemplo, puedes 'foldr' una lista infinita, mientras que el' foldl recursivo 'de cola explotará cada vez). – Chuck
Lo sé, pero head (x: xs) = head xs + 1 no explotará en una lista de 1000000 artículos? – Hai
He intentado 'head '' (x: xs) = let x '= head' 'xs en x' \' seq \ 'x '+ 1', sin éxito. Alguien tiene alguna pista? – ScootyPuff
La noción de una expresión es bastante confusa para los principiantes. Tome la construcción condicional en los lenguajes de programación imperativos. Es solo una construcción, pero en Haskell es una expresión. Por lo tanto, si un condicional debe tener una coincidencia else y ambos deben arrojar valores del mismo tipo de evaluación.
wrongFunc n = if n > 18
then 1
else False
El bloque if se evalúa en un entero donde, como el else, devuelve un bool. Este es un error común ya que en Haskell no son solo bloques de enunciados sino expresiones.
No veo por qué es confuso, y soy un poco novato de Haskell. Compare lo mismo en un lenguaje tipo C: tendría devoluciones explícitas, pero el tipo de devolución debería ser int o bool y sería un error devolver 1 o falso según el valor del argumento. – Zak
- 1. Errores comunes de programación para el programador ColdFusion para evitar?
- 2. ¿Cuáles son los errores más comunes que se deben evitar al codificar javascript para Internet Explorer?
- 3. ¿Usos comunes para los indicadores?
- 4. La implementación de un modelo de datos para evitar errores comunes
- 5. Patrones para evitar errores silenciosos de jQuery
- 6. ¿Cuáles son algunas metodologías de programación para desarrolladores en solitario?
- 7. ¿Cuáles son los errores comunes de configuración de Magento?
- 8. Tabla eficiente para programación dinámica en Haskell
- 9. ¿Cuáles son los mecanismos comunes de manejo de errores para el patrón Observer?
- 10. prácticas recomendadas de javascript para los desarrolladores de asp.net mvc
- 11. ¿Existe alguna herramienta para desarrolladores que no sean desarrolladores (traductores) para editar los paquetes de recursos?
- 12. libro de preguntas de programación para desarrolladores de C# - algoritmos para
- 13. Microsoft Certified Partner? Importante para los desarrolladores?
- 14. Errores comunes de rendimiento en Android?
- 15. Seguimiento de errores en Haskell
- 16. Programación aplicable y tipos comunes de ceceo
- 17. Powershell para desarrolladores
- 18. Pila de lámpara ideal para varios desarrolladores?
- 19. Java para desarrolladores de C#
- 20. Django para desarrolladores de web2py
- 21. Mejores prácticas para Xcode + Git para proyectos de varios desarrolladores
- 22. Comenzando con ANTLR y evitando errores comunes
- 23. ¿Qué significa Google Chrome para los desarrolladores web?
- 24. Teoría de gráficos útil para los desarrolladores de software?
- 25. Qt para desarrolladores Delphi
- 26. Haskell GUI herramientas de programación
- 27. MonoTouch v. Objective-C para los nuevos desarrolladores de iPhone
- 28. ¿Cómo hacen los desarrolladores de código abierto para ganar dinero?
- 29. ¿Una clave de Google Maps para todos los desarrolladores?
- 30. ¿Cuáles son algunos riesgos/errores comunes de Java para el programador de C++?
Y otra debería-ser-comunidad-wiki ... – chaos
Este estilo de pregunta generalmente se aprecia mejor como Wiki de la comunidad. – zombat
Es difícil imaginar por qué esto "no es una pregunta real" cuando hay tantas otras preguntas de "errores comunes de programación" en SO que han sobrevivido. –