Hay una función estándar para sumar todos los valores en un mapa Haskell. Mi mapa dice algo como [(a, 2), (b, 4), (c, 6)]?Sum over Haskell Map
Esencialmente, lo que estoy tratando de hacer es una distribución de frecuencia normalizada. Entonces, los valores de las claves en el mapa de arriba son cuentas para a, b, c. Necesito normalizarlos como [(a, 1/6), (b, 1/3), (c, 1/2)]
Buena pregunta. La solución obvia de 'foldl' es terriblemente no canónica para sumar sobre un árbol. – leftaroundabout
En realidad, 'foldl'' es la mejor manera de hacer esto que se me ocurre; 'Data.Foldable.sum' sumará cada rama por separado y luego combinará el resultado, pero no es paralelo ni nada, por lo que no hay un beneficio real al hacerlo (y tiene los problemas de rigor que mencioné en mi respuesta). Una solución paralela puede ser interesante, pero probablemente solo resulte rentable para Mapas suficientemente grandes (en cuyo punto probablemente debería usar un HashMap de [contenedores no ordenados] (http://hackage.haskell.org/package/unordered-containers) o similar, Data.Map no es una estructura particularmente eficiente). – ehird
Er ... el mío es un conjunto de datos bastante grande. De hecho, decidí no usar Hashtables desde que leí sobre problemas de rendimiento con la estructura en Haskell. ¿Es la estructura HashMap que mencionas similar en el uso? – atlantis