Aquí está, la definición supuestamente imposible de sum
en términos de map
:
summ xs = let ys = 0 : map (\(a,b)->a+b) (zip xs ys) in last ys
esto realmente muestra cómo scanl
se pueden implementar en términos de map
, al estar por encima equivalente a foldl (+) 0 xs === last $ scanl (+) 0 xs
:
scannl f z xs = let ys = z : map (uncurry f) (zip ys xs) in ys
Espero que se puedan calcular muchas cosas con map
, arreglando todo tipo de flujo de información.
edición: Lo anterior es sólo una zipWith
disfrazada por supuesto (y zipWith
es una especie de map2
):
summ xs = let ys = 0 : zipWith (+) ys xs in last ys
Esto parece sugerir que scanl
es más fundamental que foldl
, visto desde esta ángulo al menos.
Puede simplificar 'addm' solo' addm = sum'. – Waldheinz
Nota: su función addm no está definida para la lista vacía a menos que haga algo como sugiere Waldheinz. –