I ont une fonctionconfusion en ce qui concerne la paresse
myLength = foldl (\ x _ -> x + 1) 0
qui échoue avec débordement de pile avec une entrée à environ 10^6 éléments (MaLongueur [1..1000000] échoue). Je crois que cela est dû à l'accumulation de thunk depuis quand je remplace foldl avec foldl ', ça marche. Jusqu'ici tout va bien.
Mais maintenant j'ai une autre fonction d'inverser une liste:
myReverse = foldl (\ acc x -> x : acc) []
qui utilise la version paresseuse foldl (au lieu de foldl ')
Quand je fais myLength . myReverse $ [1..1000000]
. Cette fois, cela fonctionne très bien. Je ne comprends pas pourquoi foldl fonctionne pour le cas plus tard et pas pour l'ancien?
Pour clarifient ici MaLongueur utilise foldl » tandis que myReverse utilise foldl
mon mauvais !! corrigé –
Je reçois une exception de dépassement de pile pour les deux cas. – dave4420
Non, c'est juste le logo en haut du site que vous regardez;) (Je ne reçois pas d'exception pour myReverse) – Artelius