La conversion en minuscules lettres capitales
Je suis un newbie en Haskell et ont un certain problème de la définition d'une fonction qui permettrait de convertir toutes les lettres en capitale et de laisser le reste intact.
J'ai essayé de résoudre cette question dans mon livre à ce jour:
capitalise :: String -> String
capitalise xs = [capitalise2 ch| ch<-xs]
capitalise2 :: Char -> Char
capitalise2 ch
| isLower ch = chr (ord ch - 32)
| otherwise = ch
J'obtiens les erreurs suivantes:
p3.hs:6:7: Not in scope: `isLower'
p3.hs:6:23: Not in scope: `chr'
p3.hs:6:28: Not in scope: `ord'
Toute aide serait grandement appréciée.
Sachez que ce type de stratégie ne fonctionne pas dans certaines langues, parce que certains personnages prennent plus de/moins de caractères lors de la prise de majuscules/minuscules.
OriginalL'auteur Amjad | 2012-01-02
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous devez
import Data.Char
utilisation de ces fonctions, il est de se plaindre.Droit, il vous manque le
otherwise
cas dans la nouvelle fonction. Essayer avec unif .. then .. else
construire. Connu Haskellers ne pas utiliser cette construction très bien; je serais probablement le faire avec une fonction d'assistance:qui est à peu près la même chose que ce que vous avez déjà, la principale différence étant le champ d'application de la fonction d'assistance.
Voir aussi Les données.Char.toUpper.
Cela peut aussi être une bonne occasion de se libérer des interprétations de la liste et commencer à jouer avec des fonctions d'ordre supérieur. Essayez d'écrire cette fonction avec carte au lieu d'une compréhension de liste.
OriginalL'auteur luqui
A le livre explique la bibliothèque standard?
mieux
import Data.Char
. Si vous êtes à l'aide de la haskell98 moduleChar
, vous ne pouvez pas utiliser n'importe quel module debase
avec les nouveaux GHCs.OriginalL'auteur Fred Foo
Vous avez besoin de faire
isLower
partie de l'expression, au lieu de l'utiliser comme un filtre.Ou, déplacer la fonction d'assistance à l'intérieur.
À l'aide de
chr
,ord
, et-32
n'est pas la bonne façon de le faire. UtilisationtoUpper
.Il est assez bon pour ASCII.
Il donne le bon résultat pour l'ASCII, mais il n'est pas très descriptif. Vous devez utiliser le bon outil pour le travail.
OriginalL'auteur Cat Plus Plus