Haskell ha una funzione di identità che restituisce l'input invariato. La definizione è semplice:Perché la funzione "fa niente" di Haskell, id, consuma tonnellate di memoria?
id :: a -> a
id x = x
Così, per divertimento, questo dovrebbe uscita 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
Dopo pochi secondi (e circa 2 GB di memoria secondo Task Manager), la compilazione fallisce con ghc: out of memory
. Allo stesso modo, l'interprete dice ghci: out of memory
.
Poiché id
è una funzione piuttosto semplice, non mi aspetto che sia un carico di memoria in fase di esecuzione o in fase di compilazione. A cosa serve tutta la memoria?
Si desidera comporre quei 'id's. In VIM, con il cursore sulla definizione di 'f', fai questo:': s/id id/id. id./g'. –
Ti ho dato il tuo primo distintivo d'oro, alzando la tua domanda da +99 a +100 :). L'ho trovato esaminando tutte le domande con 99 voti e coloro che le hanno pubblicate senza badge d'oro;). –