【发布时间】:2015-06-06 15:45:43
【问题描述】:
这个问题来自 Haskell 新手。
我在下面编写代码来检查列表中有多少个True,如果它有even 个True,则返回True,否则返回'False'。
xor =
foldr xor' False
where
xor' True True = False
xor' False False = False
xor' _ _ = True
但是,我在下面找到了一些代码sn-ps,它似乎可以做同样的事情.. 代码如下:
xor :: [Bool] -> Bool
xor = odd . length . filter id
但我只是不知道id 在上面的代码中是如何工作的,有人可以帮我吗?
【问题讨论】:
-
id只是身份功能。filter id与filter (==True)相同 - 它只是删除了False元素。 -
我想知道谁会否决这个非常好的问题(对于初学者)——伙计们,我们应该保持对 Haskell 非常积极的小组友好!
-
@Carsten 是的,Haskell 社区以维护welcoming and friendly 着称!
-
在不相关的not上,你也可以更简洁地定义
xor,并且使用更少的内存消耗为xor = foldr1 (/=)
标签: haskell