这个问题来自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
.
归档时间: |
|
查看次数: |
1159 次 |
最近记录: |