it-roy-ru.com

Haskell: проверьте, есть ли Int в списке Int

Я новичок в Haskell, извините, если это основной вопрос.

В настоящее время у меня есть список Int, и я пытаюсь создать функцию, которая принимает переменную x и возвращает логическое значение в зависимости от того, существует ли переменная в списке.

У меня был поиск, и я нашел функцию поиска Data.List, но, похоже, это возвращение возвращает логическое значение.

Я использую GHCi.

Спасибо,

34
Joseph

Сначала найдите тип функции, которая вам нужна.

«Проверить, если» означает вернуть либо True, либо False, Bool.

Таким образом, функция принимает Int, список Int (он же [Int]) и возвращает Bool:

Int -> [Int] -> Bool

Теперь спросите Google .

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

Hoogle - очень полезный инструмент. Вы можете интегрировать его с ghci .

79
AtnNn

Если бы стандартной функции elem не существовало, вы могли бы быть на правильном пути с find.

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

Есть много других способов реализовать это, например,

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

и т.п.

17
ephemient

У меня 2 месяца попыток выучить Хаскель в свободное время. Профессионально я занимаюсь C/C++ уже несколько лет. Должен сказать, что первый месяц обучения Хаскеллу был очень приятным. Я всегда стараюсь делать что-то самостоятельно, если проблема достаточно проста, а не использовать существующие API, такие как elem. Я медленно изучаю FP способ, и ниже мое решение:

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

Использование:

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

я сделал это более просто, как это. 

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


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