list - 为什么在获取列表中的所有其他元素时会得到额外的元素?
问题描述
我是 haskell 的新手,我不知道为什么我会在列表中得到一个额外的元素。
这是我的代码:
module Test where
deal list = hand1
where list' = fst(splitAt 4 list)
hand1 = [snd list' | list'<- (zip [0..] list), even (fst list')]
如果我要输入:
Test.deal [1,2,3,4,5,6]
它拆分要创建的列表以创建两个列表的元组,其中一个列表的长度为 4:([1,2,3,4],[5,6])
当我尝试获取元组中第一个列表的所有其他元素时,我得到:[1,3,5]
而不是[1,3]
任何人都知道为什么即使它不在列表中,它也会添加 5?
解决方案
您正在定义两个不同的list'
. 列表理解list'<- (zip [0..] list)
中的一个会影响前一个。阴影意味着您在范围内有两个相同的名称,但词法上更接近的一个是唯一可见的。你想要这样的东西:
module Test where
deal list = hand1
where list0 = fst (splitAt 4 list)
hand1 = [snd list1 | list1 <- (zip [0..] list0), even (fst list1)]
有了这些改变,我可以做到
λ> deal [1,2,3,4,5,6]
[1,3]
推荐阅读
- sql-server - T-SQL:通过搜索兄弟(peer)来更新特定的 XML 节点
- modelica - 非线性电感的梯形积分
- regex - 各种十进制数的好正则表达式
- swift - 从 UIWebView 迁移到 WKWebView (decidePolicyFor navigationAction) 未按预期工作
- gnuplot - 如何从绘图中删除所有轴
- sql-server - 在 Rancher 中使用 SQL Server 映像?
- python - 集群时保留列表序列
- python - 为什么 Python 中会出现错误“模块 'googlesearch' 中没有名称 'search'”?
- kubernetes - Kubernetes pod 获得不同的 CPU 限制
- maven - 如何进行离线 Maven 构建?