Sml 删除列表的第i个元素
编写一个函数,删除列表的第i个元素。如果列表的长度小于i,则返回列表 这是所需的输出:Sml 删除列表的第i个元素,sml,smlnj,ml,Sml,Smlnj,Ml,编写一个函数,删除列表的第i个元素。如果列表的长度小于i,则返回列表 这是所需的输出: - deleteIth([1,2,3,4,5,6],3); val it = [1,2,4,5,6] : int list - deleteIth([1,2,3,4,5,6],7); val it = [1,2,3,4,5,6] : int list 这是我的密码: fun deleteIth (L, i) = let (* Deletes the element of a lis
- deleteIth([1,2,3,4,5,6],3);
val it = [1,2,4,5,6] : int list
- deleteIth([1,2,3,4,5,6],7);
val it = [1,2,3,4,5,6] : int list
这是我的密码:
fun deleteIth (L, i) =
let
(* Deletes the element of a list at ith index *)
fun delete (nil, i, position) = nil
| delete (x::xs, i, position) = if i = position then xs else
x :: delete (xs, i, position + 1)
in
if i >= 0 andalso i < length L then delete (L, i, 0) else L
end;
非常感谢您的帮助。既然您已经得到了预期的结果,下面是一个较短的版本,它只遍历列表一次,并且不会超出要删除的元素。
(
length
必须遍历整个列表以确定其长度。它可能是最不有用的列表函数。)
一般情况下,k>1且列表不为空:
- 要删除k:th元素,请从列表尾部删除元素k-1,然后将原始列表的头部添加到结果中
- 从列表中删除元素1会生成列表的尾部
- 从空列表中删除任何内容都会生成空列表
fun delete_ith ([], k) = []
| delete_ith (x::xs, 1) = xs
| delete_ith (x::xs, k) = x :: delete_ith (xs, k - 1)
您不需要helper函数或
length
。列表和索引都是您需要的参数。(提示:倒计时而不是倒计时。)谢谢,我知道了如何获得我想要的输出。但是如果没有helper函数,我将如何进行呢。
fun delete_ith ([], k) = []
| delete_ith (x::xs, 1) = xs
| delete_ith (x::xs, k) = x :: delete_ith (xs, k - 1)