什么" id"在这个Haskell代码意味着什么?

时间:2015-06-06 15:45:44

标签: haskell

这个问题来自Haskell新手。

我在下面编写代码来检查列表中有多少True,如果它有evenTrue,则返回True,否则返回`False&# 39;

xor =
foldr xor' False
where
xor' True True = False
xor' False False = False
xor' _ _ = True

但是,我在下面找到了一些代码片段,似乎它可以做同样的事情。 这是代码:

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

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

2 个答案:

答案 0 :(得分:11)

id的定义为id x = x,因此filter idfilter (\x -> x)相同。也就是说,它需要列表的所有元素,其值为True

答案 1 :(得分:8)

id函数是标识函数,定义非常简单

id :: a -> a
id x = x

函数filter的类型为

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

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