包含 haskell 中列表成员的第二个元素的列表

标签 list haskell

我正在尝试解决前一年的期中旧题,但在这个问题上遇到了很多麻烦。

使用列表理解,实现具有以下类型的函数:

collectSecond :: [[Int]] -> [Int]

使得 (collectSecond xs) 返回一个列表,其中包含 xs 的列表成员的第二个元素,但那些长度小于 2 的列表成员除外。例如:

collectSecond [[1,2,3], [4], [], [5,6]] ~> [2,6]
collectSecond [[1], [], [2]] ~> []
collectSecond [] ~> []

任何有关此问题的帮助将不胜感激。

最佳答案

您可以在列表理解中使用模式匹配来获取第二个元素,如下所示:

collectSecond xs = [x2 |  x1:x2:rest <-  xs]

此处 x2 与 xs 包含的每个列表的第二个元素(如果有)匹配。

Prelude> collectSecond [[1,2,3], [4], [], [5,6]]
[2,6]

如果没有第二个元素,则不会将任何元素添加到该子列表的列表中。例如,请参见上面示例中的 [4] 和 []。

关于包含 haskell 中列表成员的第二个元素的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15016277/

相关文章:

haskell - Haskell 是 Lisp 语言吗?

haskell - 如何制作有限制的类型

haskell - 是否有相当于 `cabal-dev ghc` 的值

c# - 如何用直接实例分配替换列表项

python - 用 pandas 转换格式不良的字典

Haskell Data.Map Lookup 不查找所有值

haskell - 当我的 getter 和 setter 返回 `Either` 时,我可以构建类似镜头的东西吗?

Python:如何用第二个数字减去列表中的第一个数字

java - 尝试从文本文件中读取

list - 在 Dart 中, `List.unmodifiable` 是创建一个不可修改的 View ,还是一个全新的独立列表?