【问题标题】:What does "id" in this Haskell code mean?这个 Haskell 代码中的“id”是什么意思?
【发布时间】:2015-06-06 15:45:43
【问题描述】:

这个问题来自 Haskell 新手。

我在下面编写代码来检查列表中有多少个True,如果它有evenTrue,则返回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 在上面的代码中是如何工作的,有人可以帮我吗?

【问题讨论】:

  • 是身份函数:haskell.org/hoogle/?hoogle=id
  • id 只是身份功能。 filter idfilter (==True) 相同 - 它只是删除了 False 元素。
  • 我想知道谁会否决这个非常好的问题(对于初学者)——伙计们,我们应该保持对 Haskell 非常积极的小组友好!
  • @Carsten 是的,Haskell 社区以维护welcoming and friendly 着称!
  • 在不相关的not上,你也可以更简洁地定义xor,并且使用更少的内存消耗为xor = foldr1 (/=)

标签: haskell


【解决方案1】:

id的定义是id x = x,所以filter idfilter (\x -> x)是一样的。即它获取列表中值为True的所有元素。

【讨论】:

    【解决方案2】:

    id函数是恒等函数,定义很简单

    id :: a -> a
    id x = x
    

    函数filter有类型

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

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

    【讨论】:

    • 谢谢bheklilr,你给了我正确的答案,但我只能选择一个作为“答案”。我不知何故知道id,就像function[]。然而,在这个特殊的问题上使用它真的让我大吃一惊:)
    猜你喜欢
    • 1970-01-01
    • 2011-05-28
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多