什么是;id";在这个Haskell代码中是什么意思?

什么是;id";在这个Haskell代码中是什么意思?,haskell,Haskell,这个问题来自Haskell的一个新手 我在下面编写代码来检查列表中有多少个True,如果它有偶数个True,则返回True,否则返回'False' xor = foldr xor' False where xor' True True = False xor' False False = False xor' _ _ = True 但是,我在下面找到了一些代码片段,它似乎也可以做同样的事情。。 代码如下: xor :: [Bool] -> Bool xor = odd . length

这个问题来自Haskell的一个新手

我在下面编写代码来检查列表中有多少个
True
,如果它有
偶数
True
,则返回
True
,否则返回'False'

xor =
foldr xor' False
where
xor' True True = False
xor' False False = False
xor' _ _ = True
但是,我在下面找到了一些代码片段,它似乎也可以做同样的事情。。 代码如下:

xor :: [Bool] -> Bool
xor = odd . length . filter id 

但是我只是不知道
id
在上面的代码中是如何工作的,有人能给我一些帮助吗?

id
的定义是
id x=x
,所以
过滤器id
过滤器(\x->x)
是一样的。也就是说,它接受列表中值为
True

的所有元素,
id
函数是identity函数,定义非常简单

id :: a -> a
id x = x
函数
过滤器
具有以下类型

filter :: (a -> Bool) -> [a] -> [a]

它接受一个返回布尔值的函数,将该函数应用于列表中的每个元素,并保留该函数返回的所有元素
True
。因此,当您拥有
filter id
时,它会过滤返回所有元素的列表,这些元素等于
True

这是标识函数:
id
只是标识函数
filter id
filter(=True)
相同-它只是删除了
False
元素。我想知道谁会否决这个非常好的问题(对于初学者)-伙计们,我们应该让非常积极的Haskell子组友好@卡斯滕:是的,哈斯凯尔社区有一个值得维护的声誉!在一个不相关的not上,您还可以更简洁地定义
xor
,并以更少的内存消耗作为
xor=foldr1(/=)
谢谢您,Bheklillr,您给了我正确的回答,但我只能选择一个作为“答案”。我不知怎的知道
id
,它就像
函数的
[]
。然而,在这个特殊的问题上使用它确实让我大吃一惊:)