Pourquoi le script Haskell suivant ne fonctionne-t-il pas comme prévu?Variables dans Haskell
find :: Eq a => a -> [(a,b)] -> [b]
find k t = [v | (k,v) <- t]
Compte tenu find 'b' [('a',1),('b',2),('c',3),('b',4)]
, l'interprète retourne [1,2,3,4]
au lieu de [2,4]
. L'introduction d'une nouvelle variable, appelée ci-dessous u
, est nécessaire pour obtenir ce travail:
find :: Eq a => a -> [(a,b)] -> [b]
find k t = [v | (u,v) <- t, k == u]
Est-ce que quelqu'un sait pourquoi la première variante ne produit pas le résultat escompté?
Répétez après moi: il n'y a pas de variables dans Haskell. ;-) Ce sont des symboles ou des identifiants. Les variables impliquent une variabilité. Chez Haskell, tout est immuable. –
@Konrad Rudolph: Le rapport Haskell 98 utilise le terme «variable» partout. Il est important de noter que cela ne veut pas dire ce à quoi vous pouvez vous attendre, mais je ne pense pas qu'être plus persévérant que la documentation standard soit nécessairement utile. –
@Konrad Rudolph: Sûrement vous plaisantez! Pourquoi, j'ai trouvé toute une section sur les variables [dans certains Haskell, ici] (http://books.google.com/books?id=27dkTJFrLZIC&pg=PA111). –