Ho una funzioneconfusione riguardo pigrizia
myLength = foldl (\ x _ -> x + 1) 0
che non riesce a straripamento stack con ingresso circa 10^6 elementi (myLength [1..1000000] fallisce). Credo che sia dovuto al thunk build up da quando sostituisco foldl with foldl ', funziona. Fin qui tutto bene.
ma ora ho un'altra funzione per invertire una lista:
myReverse = foldl (\ acc x -> x : acc) []
che utilizza la versione pigro foldl (invece di foldl ')
Quando faccio myLength . myReverse $ [1..1000000]
. Questa volta funziona perfettamente. Non riesco a capire perché foldl funzioni per il caso successivo e non per il precedente?
Per chiarire qui myLength utilizza foldl' mentre myReverse utilizza foldl
il mio male !! corretto –
Ottengo un'eccezione di overflow dello stack per entrambi i casi. – dave4420
No, questo è solo il logo nella parte superiore del sito Web che stai guardando;) (Non ottengo un'eccezione per myReverse) – Artelius