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]
答案 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"