这个问题来自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上面的代码是如何工作的,有人能给我一些帮助吗?
该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.