为什么在获取列表中的所有其他元素时会得到额外的元素?

我是 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]


以上是为什么在获取列表中的所有其他元素时会得到额外的元素?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>