En la página de Wikipedia summation dice que la operación equivalente en Haskell es usar foldl. Mi pregunta es: ¿hay alguna razón por la que dice usar esto en lugar de suma? ¿Es uno más "purista" que el otro, o no hay una diferencia real?Notación de suma en Haskell
Respuesta
foldl
es una función de reducción general tail-recursive. La recursividad es la forma habitual de pensar sobre la manipulación de listas de elementos en un lenguaje de programación funcional, y proporciona una alternativa a la iteración de bucle que a menudo es mucho más elegante. En el caso de una función de reducción como fold
, la implementación recursiva de cola is very efficient. Como otros han explicado, sum
es simplemente un conveniente mnemónico para foldl (+) 0 l
.
Presumiblemente, su uso en la página wikipedia es para ilustrar el principio general de suma a través de la recursividad de la cola. Pero como la biblioteca Haskell Prelude contiene sum
, que es más corta y más obvia de entender, debe usarla en su código.
Aquí hay un nice discussion de Haskell's fold
funciones con ejemplos simples que vale la pena leer.
No veo dónde dice nada sobre Haskell o foldl
en esa página de Wikipedia, pero sum
en Haskell es solo un caso más específico de foldl
. Se puede implementar de esta manera, por ejemplo:
sum l = foldl (+) 0 l
que puede reducirse a:
sum = foldl (+) 0
No hay ninguna diferencia. Esa página simplemente dice que sum
se implementa usando foldl
. Simplemente use sum
siempre que necesite calcular la suma de una lista de números.
Según lo manifestado por los otros, no hay diferencia. Sin embargo, una sumatoria es más fácil de leer que un fold-call, así que iría por la suma si necesita un resumen.
Una cosa a tener en cuenta es que la suma puede ser más lenta de lo que desearía, así que considere usar foldl '.
El concepto de suma se puede extender a tipos no numéricos: todo lo que necesita es algo equivalente a una operación (+) y un valor cero. En otras palabras, necesita un monoid. Esto lleva a la función Haskell "mconcat", que devuelve la suma de una lista de valores de un tipo monoide. El "mconcat" predeterminado, por supuesto, se define en términos de "mappend", que es la operación más.
- 1. Haskell polimórfica árbol Suma
- 2. Cálculo de la suma acumulada de la lista en Haskell
- 3. Scala equivalente de do-notación de Haskell (una vez más)
- 4. Haskell notación de rango para generar una lista. Resultado inesperado
- 5. "<-" enlaces en notación
- 6. ¿Cómo llego a Haskell a los números de salida NO en notación científica?
- 7. Notación húngara en C#
- 8. Notación Zed en LyX
- 9. Notación de división en Scala?
- 10. Notación de elipsis en C#?
- 11. Cubesumming en Haskell
- 12. ¿Cómo convertir una cadena de notación científica a notación decimal?
- 13. cómo hacerlo suma de suma en la consulta mysql salida
- 14. Haskell: ¿Sería útil la notación "do" para contextos distintos de las mónadas?
- 15. Notación de probabilidad
- 16. Notación de subred IP
- 17. Notación de JavaScript: (function() {...})();
- 18. Utilizando la función de mapa de Haskell para calcular la suma de una lista
- 19. Notación húngara en Intellij IDEA
- 20. Notación para lógica en Java
- 21. de formato de cadena en notación científica
- 22. Máximo de suma en SQL
- 23. problema en conseguir Suma
- 24. Suma Iterable en Java?
- 25. notación de puntos de JavaScript
- 26. ¿Notación de soporte de Java?
- 27. notación abreviada de bytes en C/C++?
- 28. Notación de llaves rizadas en PHP
- 29. PHP llaves en la notación de matriz
- 30. Java int ... notación de array
Aah, ahora lo veo. Hice una búsqueda de 'foldl' pero la página de Wikipedia usa 'fold'. –