Próbowałem rozwiązać problem, który wymagał maksymalnej wartości listy po odwzorowaniu przez funkcję. Lista zawiera się w przedziale od a do b, gdzie a> b lub b> a. Ponieważ Haskell może również definiować malejące listy, pomyślałem, że nie muszę sprawdzać, czy> b i nie było potrzeby przekierowywania granic do b..a. Funkcja wygląda nieco jak poniżej:Dlaczego [1..n] nie jest traktowany tak samo jak [n.1] w Haskell?
f a b = maximum . map aFunction $ [a..b]
Ale jeśli lista maleje czyli a> b wtedy Haskell daje mi wyjątek:
Prelude.maximum: empty list
więc dla jakiegoś powodu zmniejszającej się lista ręce nad pustą listę do maksymalnej funkcji. Dlaczego?
wiem, że maximum
jest definiowana w kategoriach foldl1 max
i że foldl1
potrzebuje non pustą listę, ale nie wiem, dlaczego lista jest pusta jak [10..1]
gdy podał do foldl1
.
'[10..1]' jest pusty, cokolwiek z nim zrobisz (nawet jeśli nie przekażesz go 'foldl1'). W ten sposób zdefiniowany jest zakres. –
Możliwy duplikat [Haskell, range downto without step] (http://stackoverflow.com/questions/6972599/haskell-range-downto-without- step). –
Możliwy duplikat http://stackoverflow.com/questions/6806455/haskell-list-range-question oraz – hvr