Estaba tratando de resolver un problema que requería el valor máximo de una lista después de ser mapeada por una función. La lista es un rango de a a b donde a> b o b> a. Debido a que Haskell también puede definir listas decrecientes, pensé que no era necesario verificar si a> b y no había necesidad de voltear los límites a b..a. La función se ve algo como esto:¿Por qué [1..n] no se maneja de la misma manera que [n..1] en Haskell?
f a b = maximum . map aFunction $ [a..b]
Pero si la lista está disminuyendo es decir, a> b entonces Haskell me da una excepción:
Prelude.maximum: empty list
Así que por alguna razón una lista que disminuyen las manos sobre una lista vacía a la función máxima. ¿Porqué es eso?
sé que maximum
se define en términos de una foldl1 max
y que foldl1
necesita una lista no vacía, pero yo no sé por qué una lista como [10..1]
está vacía cuando se entregó a un foldl1
.
'[10..1]' está vacío haga lo que haga con él (incluso si no lo pasa a 'foldl1'). Así es como se define el rango. –
Posible duplicado de [Haskell, rango hacia abajo sin paso] (http://stackoverflow.com/questions/6972599/haskell-range-downto-without-step). –
Posible duplicado de http://stackoverflow.com/questions/6806455/haskell-list-range-question también – hvr