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

lll*_*lll 7 haskell

这个问题来自Haskell新手.

我在下面编写代码来检查True列表中的even数量,如果它有数量True,则返回True,否则返回"False".

xor =
foldr xor' False
where
xor' True True = False
xor' False False = False
xor' _ _ = True
Run Code Online (Sandbox Code Playgroud)

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

xor :: [Bool] -> Bool
xor = odd . length . filter id 
Run Code Online (Sandbox Code Playgroud)

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

sep*_*p2k 12

定义idid x = x,所以filter id是一样的filter (\x -> x).也就是说它需要列表中值的所有元素True.


bhe*_*ilr 9

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

id :: a -> a
id x = x
Run Code Online (Sandbox Code Playgroud)

该函数filter具有类型

filter :: (a -> Bool) -> [a] -> [a]
Run Code Online (Sandbox Code Playgroud)

它接受一个返回布尔值的函数,将该函数应用于列表的每个元素,并保留函数返回的所有元素True.所以,当你有filter id,它过滤列表返回所有相等的元素True.