【发布时间】:2019-11-05 09:24:28
【问题描述】:
我将此代码输入到 ghci
Prelude> filter snd [('a',True),('b',True),('c',False),('d',True)]
为什么会返回
[('a',True),('b',True),('d',True)]
而不是
[('a',True),('c',False),('d',True)]
snd函数返回第二项,那为什么不filter snd过滤第二项呢?
【问题讨论】:
-
你能解释一下你为什么期望这个结果吗?我无法理解您期望
filter snd使用的逻辑。 -
@RobinZigmond:我认为 Jesse 认为这意味着“过滤掉每一秒的元素”,如一个保留、一个移除、一个保留……
-
@WillemVanOnsem 不,只是列表中的第二个。他们添加了一个示例。
-
这里在 this 用例中,
snd与(\ x -> snd x == True)相同,与(\ (_,b) -> b == True)相同,这对您来说可能更清楚。但当然只有snd(与(\ (_,b) -> b)相同)是首选拼写。隐含的(== True)是filter语义的一部分,即filter的工作原理。
标签: list haskell filter filtering predicate