30 votes

À Haskell, où s'arrête la plage ['a' ..]?

J'apprends Haskell pour le plaisir, en suivant Learn you a Haskell . La plage peut aller à l'infini avec des nombres lors de l'utilisation de [1..] . Avec les caractères, où s'arrête la plage ['a'..] ? Je suppose un peu le dernier caractère de la table Unicode, mais je ne sais vraiment rien sur Haskell, alors demandez simplement!

56voto

w.b Points 2408

Si vous voulez savoir où la plage s'arrête, juste obtenir le dernier élément...

ghci> last ['a'.. ]
'\1114111'

Une autre méthode: Char est bornée type, c'est à dire un type avec des valeurs minimales et maximales définies. Les Types de l' Bounded classe fournit un maxBound de la valeur. Depuis maxBound est polymorphe, vous devez déclarer explicitement le type de la valeur que vous recherchez.

ghci> maxBound :: Char
'\1114111'
ghci> maxBound :: Int
9223372036854775807

Il n'y a pas d' maxBound pour Integer depuis qu'ils sont sans limite.

Le Haskell prélude explique le lien entre ['a'..] et maxBound. La notation ['a'..] est sucre syntaxique pour enumFrom a; ici, enumFrom est une méthode de l' Enum type de classe. La documentation de l' Enum indique que lorsque le type est aussi une instance d' Bounded, enumFrom x doit être équivalent à enumFromTo x maxBound, ou des plus lisible, [x..] = [x..maxBound]. Ainsi, le dernier élément de l' ['a'..] doit être le même que maxBound :: Char.

last ['a'.. ] ne itérer sur la liste, mais un ordinateur moderne peut compter jusqu'à un million de dollars en un clignement de paupières. Ce n'est pas quelque chose que vous voudriez mettre dans une boucle serrée, mais comme quelque chose que vous exécutez, juste une fois, il n'est pas un gros fardeau. Si vous essayez, au moins optimisée mise en œuvre comme les Câlins au lieu de GHC, vous devrez peut-être attendre le résultat. En revanche last [0..] environ pour toujours.

39voto

thSoft Points 5513

À partir du Haskell Rapport de 2010:

Le caractère de type Char est une énumération dont les valeurs représentent Les caractères Unicode. Le Type Char est une instance des classes de la Lire, voir, Eq, Ord, Enum, et Délimitée.

Donc, en théorie, cette gamme devrait arrêter sur le dernier caractère défini dans la norme Unicode (si ce n'est pas indiqué quelle version). Dans la pratique, votre Haskell mise en œuvre peut varier, par exemple, GHCI 7.6.2 s'arrête à \1114111.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X