Haskell ma funkcję identyfikacji, która zwraca dane wejściowe bez zmian. Definicja jest prosta:Dlaczego funkcja Haskella "nie rób nic", id, zużywa ton pamięci?
id :: a -> a
id x = x
Tak dla zabawy, to powinien wypisać 8
:
f = id id id id id id id id id id id id id id id id id id id id id id id id id id id
main = print $ f 8
Po kilku sekundach (i około 2 GB pamięci według Task Manager), kompilacja nie powiedzie się z ghc: out of memory
. Podobnie, tłumacz mówi: ghci: out of memory
.
Od id
jest dość prosta funkcja, nie spodziewam się, że jest to obciążenie pamięci w czasie wykonywania lub czas kompilacji. Do czego służy cała pamięć?
Chcesz skomponować te "identyfikatory". W VIM, kursorem na definicji 'f', wykonaj następujące czynności:': s/id id/id. id./g'. –
Dałem ci swoją pierwszą złotą odznakę, poprzez upomnienie twojego pytania od +99 do +100 :). Znalazłem to, patrząc na wszystkie pytania z 99 głosami, i tych, którzy wysłali je bez złotej odznaki;). –