Próbuję zwrócić długość listy jako typ Integer
, ale zastosowanie length xs
zwraca długość jako typ Int
. Jak mogę obejść ten problem?Jak zwrócić długość listy jako typ Integer zamiast Int w Haskell
To co próbuję osiągnąć: (nie działa)
sizeList :: [Integer] -> Integer
sizeList xs = length xs
Działa on jak najszybciej zmienić powrót do sizeList :: [Integer] -> Int
ale nie chcę, aby to zrobić.
Przejdź z "genericLength", jak powiedział Sebastian - lub uzupełnij długość jako ćwiczenie: D – Carsten
Mam nadzieję, że dobrze się zastanawiasz, czy to dobry pomysł? Zwykle nie jest możliwe, aby mieć listę tak długo, że nie można policzyć jej długości w 'Int' - powodem jest to, że pamięć komputera jest w zasadzie indeksowana przez ints, więc architektura z wystarczającą pamięcią będzie na ogół wystarczająco duża, aby zmierzyć dowolna lista. Na 64-bitowej platformie, liczenie aż do przepełnienia [trwa wieki] (mimo to, http://www.wolframalpha.com/input/?i=2^64+%2F+3GHz), nawet jeśli korzystasz z nieskończonej listy. Dlatego standardowa funkcja 'length', słusznie IMO, zwraca' Int' not' Integer'. – leftaroundabout
I na 32-bitowej plattform, zajmie to 1,4 sekundy, ale w tym momencie używałbyś (2^32 * 8 bajtów ~ 34 GB). – Zeta