[英]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.