list - Haskell中的函数snd如何在过滤器中工作
问题描述
我将此代码输入到 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
的列表中“过滤掉”元素,从而 删除第二项。filter snd
这不是它的工作方式
如果你是对的,filter snd [1,2,3]
将评估为[1,3]
. 相反,它不进行类型检查,因为它snd
适用于元组,而不是数字。
那么它是怎样工作的?
filter f [item1, item2, ...]
返回所有item
s的f item
列表True
例如,filter even [1,2,3,4]
返回[2,4]
snd ('b', True)
评估为,True
在您的示例filter
中将包含(b, True)
在结果中。同理,(c, False)
将省略
推荐阅读
- javascript - 单击浏览器后退按钮时启用以前禁用的按钮
- javascript - 嵌套在If语句中的Javascript switch语句无法访问其他变量并返回Unidentified
- azure - 如何模拟 cosmos db 故障转移以进行测试和开发?
- varnish - Varnishlog 截断用户代理
- aws-lambda - 使用无服务器模拟 ftp
- pine-script - 在交易视图中绘制蜡烛上的自定义交易量
- c++ - 使用 boost odeint 返回导数
- java - 当有其他组件时,如何在 JFrame 中使用 KeyListener?
- flutter - Flutter like_button 动画延迟点击
- reactjs - 放大身份验证配置错误 AWSPinpointProvider - updateEndpoint 错误 TypeError: Object(...) is not a function