J'ai quelques Haskell code qui ne fonctionne correctement sur une liste infinie, mais je ne comprends pas pourquoi elle ne peut le faire avec succès. (J'ai modifié mon code d'origine -- qui n'a pas de poignée infini listes -- d'incorporer quelque chose à partir d'une autre ligne de code, et tout à coup je vois que ça fonctionne mais je ne sais pas pourquoi).
myAny :: (a -> Bool) -> [a] -> Bool
myAny p list = foldr step False list
where
step item acc = p item || acc
Ma compréhension de foldr, c'est qu'il passe en boucle sur chaque élément de la liste (et peut-être que la compréhension est incomplète). Si oui, il ne devrait pas d'importance comment les "étape" de la fonction est formulé ... le code doit être incapables de gérer les boucles infinies.
Cependant, les ouvrages suivants:
*Main Data.List> myAny even [1..]
True
S'il vous plaît aidez-moi à comprendre: pourquoi??