我是Haskell的新手,对不起,如果这是一个基本问题.
我目前有一个Int的列表,我正在尝试创建一个函数,它接受一个变量x并返回一个布尔值,具体取决于该变量是否存在于列表中.
我有一个搜索,发现Data.List查找函数,但这个dosent似乎返回一个布尔值.
我正在使用GHCi.
谢谢,
Atn*_*nNn 85
首先找到您需要的功能类型.
要"检查是否"意味着返回True或False,一个Bool.
所以函数接受一个Int,一个Int(又名[Int])列表并返回Bool:
Int -> [Int] -> Bool
Run Code Online (Sandbox Code Playgroud)
现在问一下hoogle.
elem :: Eq a => a -> [a] -> Bool
Run Code Online (Sandbox Code Playgroud)
Hoogle是一个非常有用的工具.您可以将它与ghci集成.
eph*_*ent 18
如果标准elem功能不存在,您可能已经走上正轨find.
myElem :: (Eq a) => a -> [a] -> Bool
myElem x = maybe False (const True) . find (== x)
Run Code Online (Sandbox Code Playgroud)
还有很多其他方法可以实现它,比如
myElem x = any (== x)
myElem x = or . map (== x)
myElem x = not . null . filter (== x)
myElem x = foldr (\y b -> y == x || b) False
Run Code Online (Sandbox Code Playgroud)
等等
我正在尝试在业余时间学习 Haskell 的 2 个月。专业上,我做了几年 C/C++。我必须说,学习 Haskell 的第一个月是一段令人头疼的经历。如果问题足够简单,我总是尝试自己做事,而不是使用现有的 API,例如elem. 我正在慢慢学习FP的方式,下面是我的解决方案:
isMember n [] = False
isMember n (x:xs)
| n == x = True
| otherwise = isMember n xs
Run Code Online (Sandbox Code Playgroud)
用法:
isMember 2 [1,9,4,5] -- False
isMember 2 [4,5,2,9] -- True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52857 次 |
| 最近记录: |