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,
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 .
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.
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
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