繁体   English   中英

从 Haskell 中的列表中返回最后 n 个元素

[英]Return last n elements from lists in Haskell

我是 Haskell 的新手,目前正在尝试了解模式匹配。 那么是否有可能从这样的列表中获取最后 3 个元素: [[1,2,3,4,5,6], [5,6,7,8,9], [10,11,12,13]]返回这样的[(4,5,6), (7,8,9), (11,12,13)]

这是我的代码

lastElems [] = []
lastElems ((x:xs):ys) = drop (length xs - 3) xs : lastElems ys

我认为它做了它应该做的事情,但它作为列表中的列表而不是元组返回。 任何人都可以给我一个关于如何解决这个问题的提示吗?

这是否也意味着您不能将 (:) 与元组一起使用? 提前致谢。

drop :: Int -> [a] -> [a]接受一个Int和一个列表[a] ,并返回一个[a] 这也是有道理的,因为数字是任意的,因此我们无法在编译时知道列表将有多少个元素。

然而,我们可以使用显式递归来检索最后三个元素:

last3 :: [a] -> (a, a, a)
last3 [x1, x2, x3] = (x1, x2, x3)
last3 (_:xs@(_:_:_:_)) = last3 xs

那么lastElems只是last3的映射:

lastElems :: [[a]] -> [(a, a, a)]
lastElems = map last3

此功能当然不适用于少于三个元素的列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM