web-dev-qa-db-fra.com

Haskell: Vérifie si Int est dans une liste d'Int

Je suis nouveau à Haskell, désolé si c'est une question fondamentale.

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

J'ai eu une recherche et trouvé la fonction de recherche Data.List mais ce dosent semble retourner un booléen.

J'utilise GHCi.

Merci,

34
Joseph

Commencez par trouver le type de fonction dont vous avez besoin.

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

Donc, la fonction prend un Int, une liste de Int (aka [Int]) et renvoie Bool:

Int -> [Int] -> Bool

Maintenant demandez à Hoogle .

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

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

79
AtnNn

Si la fonction standard elem n'existait pas, vous auriez pu être sur la bonne voie 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

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.

17
ephemient

Je suis dans mes 2 mois d'essayer d'apprendre Haskell pendant mon temps libre. Professionnellement, je pratique le C/C++ depuis plusieurs années. Je dois dire que le premier mois d'apprentissage de Haskell a été une expérience incroyable. J'essaie toujours de faire les choses moi-même si le problème est assez simple plutôt que d'utiliser des 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

Usage:

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

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
0
Fandaman