我是Haskell的新手,对不起,如果这是一个基本问题。
我目前有一个Int的列表,我正在尝试创建一个函数,该函数接受变量x并返回一个布尔值,具体取决于变量是否存在于列表中。
我有一个搜索并找到了Data.List查找函数,但是这个剂似乎返回了一个布尔值。
我正在使用GHCi。
谢谢,
答案 0 :(得分:82)
首先找到你需要的功能类型。
要“检查是否”意味着返回True或False,一个Bool。
因此该函数采用Int,Int(又名[Int])列表并返回Bool:
Int -> [Int] -> Bool
现在ask hoogle。
elem :: Eq a => a -> [a] -> Bool
Hoogle是一个非常有用的工具。你可以integrate it with ghci。
答案 1 :(得分:18)
如果标准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
等
答案 2 :(得分:2)
我有2个月的时间试图在业余时间学习Haskell。专业上,我从事C / C ++已有数年。我必须说,学习Haskell的第一个月是一次轻松的经历。如果问题很简单,我总是尝试自己做,而不是使用现有的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
答案 3 :(得分:0)
我更简单地这样做了。
l=[1,2,3,4,5]
checkIfElem :: Int -> [Int] ->Bool
checkIfElem x l
|x`elem` l =True
|otherwise=False