📅  最后修改于: 2023-12-03 14:49:21.943000             🧑  作者: Mango
在Haskell中,我们可以使用标准库提供的 delete
函数来删除列表中的元素。但是,该函数删除的是指定元素的所有出现次数,而非指定索引位置上的元素。因此,我们需要自己实现一个函数来删除列表中的指定位置元素。
以下是一个示例函数 deleteNth
的实现:
deleteNth :: Int -> [a] -> [a]
deleteNth n xs = case splitAt n xs of
(_, []) -> xs -- 目标索引超出列表长度,返回原列表
(ys, _ : zs) -> ys ++ zs -- 已将指定位置元素删去,返回新列表
这个函数接受一个整数 n
和一个列表 xs
,并返回一个新列表,该新列表中已将列表 xs
中索引位置为 n
的元素删除。如果目标索引超出列表长度,则直接返回原列表。
我们可以使用该函数来删除任何列表中的元素。例如,以下代码演示了如何从列表 [1,2,3,4,5]
中删除索引位置为 2
的元素:
deleteNth 2 [1,2,3,4,5] -- 返回 [1,2,4,5]
需要注意的是,Haskell 中的列表是不可变的,因此我们在删除元素时实际上是创建了一份新的列表。因此,如果需要反复在同一个列表中删除元素,则需要向函数参数中传递新的列表。
以上就是在 Haskell 中从列表中删除第 n 个元素的方法。