45 votes

Haskell : Vérifier si Int est dans une liste de Int

Je suis novice en Haskell, désolé si cette question est basique.

J'ai actuellement une liste d'Int et j'essaie de créer une fonction qui prend une variable x et renvoie un booléen selon que la variable existe ou non dans la liste.

J'ai cherché et trouvé la fonction find de Data.List, mais elle ne semble pas retourner un booléen.

J'utilise GHCi.

Merci,

100voto

AtnNn Points 4092

Trouvez d'abord le type de fonction dont vous avez besoin.

Vérifier si" signifie renvoyer soit Vrai soit Faux, un Bool.

La fonction prend donc un Int, une liste d'Int (alias [Int]) et retourne un Bool :

Int -> [Int] -> Bool

Maintenant demander à hoogle .

elem :: Eq a => a -> [a] -> Bool

Hoogle est un outil très utile. Vous pouvez l'intégrer au ghci .

20voto

ephemient Points 87003

Si la norme elem n'existait pas, vous auriez pu être sur la bonne piste avec find .

myElem :: (Eq a) => a -> [a] -> Bool
myElem x = maybe False (const True) . find (== x)

Il y a beaucoup d'autres façons de le mettre en œuvre, comme par exemple

myElem x = any (== x)
myElem x = or . map (== x)
myElem x = not . null . filter (== x)
myElem x = foldr (\y b -> y == x || b) False

etc.

5voto

typelogic Points 797

J'essaie depuis deux mois d'apprendre Haskell pendant mon temps libre. Professionnellement, je fais du C/C++ depuis plusieurs années. Je dois dire que le premier mois d'apprentissage de Haskell m'a fait tourner la tête. J'essaie toujours de faire les choses par moi-même si le problème est assez simple plutôt que d'utiliser les API existantes comme elem . J'apprends lentement la méthode FP, et voici ma solution :

isMember n [] = False
isMember n (x:xs)
    | n == x = True
    | otherwise = isMember n xs

Utilisation :

isMember 2 [1,9,4,5] -- False
isMember 2 [4,5,2,9] -- True

0voto

Fandaman Points 25

Je l'ai fait plus simplement comme ça.

l=[1,2,3,4,5]

checkIfElem :: Int -> [Int] ->Bool
checkIfElem x l 
         |x`elem` l =True
         |otherwise=False

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