如何获取列表的第n个元素

时间:2021-06-08 13:18:23

标签: haskell

nth_element n list:返回列表的第 n 个元素。从 1 开始计数。例如, nth_element 3 [2,5,4,6,8] 应该返回 4。约束:递归地定义这个函数。

我的代码不断返回空列表。请问有人可以帮忙吗?我是 Haskell 的新手。 这是我的代码如下:

nth_element n list =[y | (y,z) <- zip [1..] list ,z==n]

1 个答案:

答案 0 :(得分:0)

你的版本不断返回一个空列表,因为 z 对你来说是输入列表的一个元素,你将它与应该是你的索引的 n 进行比较 - 在​​此之上你返回索引(您或多或少交换了 zip 返回的内容)即使它有效,它也会是一个列表。

这应该可以解决您的问题:

nth_element n xs = head [ x | (i,x) <- zip [1..] xs , i == n ]

这是一个非递归版本(你的也不是递归的,所以即使你有这个约束,这也许没问题?)

您可以使用 !!

nth_element n xs = xs !! (n-1)

这是您的示例:

> nth_element 3 [2,5,4,6,8]   
4                                    

现在你想要递归,所以你应该这样做:

nth_element 1 (x:_) = x
nth_element n (_:xs) 
   | n > 1 = nth_element (n-1) xs
nth_element _ _ = error "out-of-range"