Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell:检查Int是否在Int';s_Haskell - Fatal编程技术网

Haskell:检查Int是否在Int';s

Haskell:检查Int是否在Int';s,haskell,Haskell,我是Haskell的新手,如果这是一个基本问题,我很抱歉 我目前有一个Int的列表,我正在尝试创建一个函数,该函数接受一个变量x并返回一个布尔值,这取决于该变量是否存在于列表中 我已经搜索并找到了Data.List find函数,但这个函数似乎返回了一个布尔值 我正在使用GHCi 谢谢,首先找到您需要的功能类型 “检查是否”意味着返回True或False,即布尔值 因此,函数接受一个Int,一个Int列表(也称为[Int]),并返回Bool: Int -> [Int] -> Bool

我是Haskell的新手,如果这是一个基本问题,我很抱歉

我目前有一个Int的列表,我正在尝试创建一个函数,该函数接受一个变量x并返回一个布尔值,这取决于该变量是否存在于列表中

我已经搜索并找到了Data.List find函数,但这个函数似乎返回了一个布尔值

我正在使用GHCi


谢谢,

首先找到您需要的功能类型

“检查是否”意味着返回True或False,即布尔值

因此,函数接受一个Int,一个Int列表(也称为[Int]),并返回Bool:

Int -> [Int] -> Bool
现在


胡格尔是一个非常有用的工具。您可以。

如果标准的
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

等等。

我这样做比较简单

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


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

我在业余时间学习哈斯克尔已经有两个月了。在专业方面,我做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

这确实很简单,但也可以说这是一种极其复杂的定义编写方法,因为它与之完全相同!(警卫已经检查布尔值,
| condition=True
否则=False
因此相当于简单地
=condition
。这就给你留下了
checkIfElem x l=elem x l
,通过η-减少,你可以删除两边的参数。)我认为这并不简单。请谷歌带我到这里。你不必对OP苛刻。我怎样才能改善答案的语气?我不是想说得太苛刻。概括起来,你可以使用
elem1[5,2,1,8]
或中缀方式
1`elem`[5,2,1,8]
,在这两种情况下它都会返回
True
,因为列表中有1。当然,您可以使用变量来代替非常有用的按类型搜索的技巧来查找函数。在OOP语言中,可以使用.(点)查找所有“方法”,而在Haskell中,可以通过这种方式搜索函数。很有意思。Hoogle是个很棒的工具,谢谢!我想在我真正理解功能设计模式之前,我早在几年前就知道了这一点,我不知道它有多有用。
isMember 2 [1,9,4,5] -- False
isMember 2 [4,5,2,9] -- True