Je veux obtenir seulement les lettres majuscules d'une chaîne, et a eu l'idée de voir si chaque lettre dans la chaîne est contenue dans une liste de toutes les lettres majuscules:Comment utiliser la compréhension de liste comme condition dans une compréhension de liste?
capsOnly = [ x| x<- string, (x elem ['A'..'Z'])]
le problème est que, apparemment, Haskell ne ne reconnaît pas que la partie derrière la virgule est censé être une condition pour x, et me donne ceci:
* Couldn't match expected type `(a0 -> t0 a0 -> Bool)
-> [Char] -> Bool'
with actual type `Char'
* The function `x' is applied to two arguments,
but its type `Char' has none
In the expression: (x elem ['A' .. 'Z'])
In a stmt of a list comprehension: (x elem ['A' .. 'Z'])
Alors, comment puis-je définir ce qui est de l'argument et quelle est la liste où x vient? Ou est-ce impossible?
Je sais que vous pouvez aussi le faire comme:
onlyCaps = [ x| x<- string, x < 'a']
mais je veux vraiment savoir si ma première approche est possible, et comment l'écrire si elle est
Ou '[x | x <- chaîne, x \ 'elem \' ['A' .. 'Z']] '(probablement ce que l'OP essayait d'écrire en premier lieu) – jwodder
@jwodder: Je pensais exactement la même chose :) –
Sommes-nous sûrs que GHC n'optimiserait pas 'elem x ['A' .. 'Z']' à 'x> = 'A', x <= 'Z'' ..? – Redu