J'ai une liste comme celle-ci et je voudrais convertir en p> aide.
Merci. p> p>
3 Réponses :
cnv :: [String] -> [(String, Integer)] cnv [] = [] cnv (k:v:t) = (k, read v) : cnv t If you want to handle odd-length just add cnv [x] = variant before last one
Pouvez-vous expliquer ces lignes de code CNV (K: v: t) = (K, Lecture V): CNV T? AFAIK, le K v T est un paramètre de la liste K est la tête et V est la queue et le CNV T est un élément suivant comme k. Est-ce que ma compréhension est correcte parce que présidiosité j'ai fonctionne comme ceci. Convertir :: [String] -> [(chaîne, entier)] Convertir [] = [] Convert (x: Y: xs) = (x, y) convertir XS et pourquoi quand j'ajoute: XS ne fonctionne pas? Le K v T est-il représenté un élément unique de la liste ou de la liste entière?
Pas tout à fait: dans k: v: t code>,
k code> est la tête et
v: t code> est la queue. Ainsi,
k: v: t code> met les deux premiers éléments de la liste dans
k code> et
v code> et la queue restante dans
t < / code>. Votre code a deux problèmes évidents: (a)
(x, y) code> a type
(chaîne, chaîne) code>, pas
(chaîne, entier) code> ; et (b) il n'y a pas de côlon avant
convertit XS code>. (Vous ne pouvez pas simplement faire
: xs code>, car vous avez besoin
[(chaîne, entier)] code> mais
xs code> a le type
[chaîne ] Code>.) De plus, une astuce de formatage: des lignes de retrait avec quatre espaces vides pour obtenir des blocs de code (ou sélectionnez votre code, puis cliquez sur le bouton "101010") et des extraits de code surround avec des backts (`... Code. ..`).
(x: xs) qui signifie x est la tête et l'élément restant est la queue pour XS. Merci pour votre explication.
@Antal S-Z a raison. (k: v: t) code> équivalent à
(k: (v: t)) code> en raison de la déclaration
infixr 5: code> dans
ghc.types Code>
(aussi bien data [] a = [] | A: [A] code> vous dira de sens de
(v: t) code> ou
ou
ou
ou
[] code>).
(Ou sélectionnez votre code et cliquez sur le bouton "101010") et des extraits de code surround avec des backtstics ( ... code ... code>). N'importe quel exemple. Comment faire cela manuellement? Je ne comprends pas ce que tu dis ici. (k: v: t) équivalent à (k: (v: t)) en raison de la déclaration infixe 5: dans GHC.Types (aussi bien que les données [] A = [] | A: [A] vous racontera la signification de (v: t) ou [])
L'instruction INFIXR 5: CODE> dit que
: code> Groupes à droite avec précision 5. En d'autres termes,
W: X: Y: Z code> est < Code> W: (x: (Y: z)) code>, pas
((w: x): y): z code>. Le
5 code> vous dit où il tombe dans la chaîne de prime; Par exemple, étant donné que
* code> est livré avant
+ code>,
* code> a la priorité 7 tandis que
+ code> a préséance 6. Qu'est-ce que le < Code> Données [] A = [] | A: [a] code> Déclaration vous indique est la définition de
: code> et
[] code>; C'est-à-dire qu'ils construisent des parties de listes, etc. comme pour le formatage: il suffit de taper `avant votre code et` après cela. Lire L'aidation de l'édition pour plus.
La solution de Ony's's's est un peu plus courte, Mais voici une version non récursive utilisant Les étapes sont un peu plus claires (pour moi, à moins) que dans la version récursive. p> p> SplitTery code> du très pratique
Split code> bibliothèque
:
Ceci est définitivement plus naturel. La bibliothèque de Split ne reçoit pas assez d'amour. C'est dommage, car il est incroyablement utile.
Notez que SplitTery code> semble être obsolète maintenant; Utilisez
Chunksof < / code>
à la place.
Exactement pour une tâche comme celle-ci, je trouve qu'il est pratique d'avoir une fonction code> Stride code> pour prendre chaque n-e élément de la liste:
[("peter",1000),("michell",2000),("kelly",3000)]