编写一个删除列表中第 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 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;
注意:x :: delete(xs,I,position + 1)行应该在上一行的else之后,换行使我以这种方式显示代码。抱歉
但是我的代码放了
- deleteIth([1,2,3,4,5,6],3);
val it = [1,2,3,5,6] : int list
- deleteIth([1,2,3,4,5,6],7);
val it = [1,2,3,4,5,6] : int list
感谢您的帮助。
答案 0 :(得分:1)
由于您已经获得了预期的结果,所以这是一个较短的版本,它仅遍历列表一次,并且永远不会超出要删除的元素。
(length
必须遍历整个列表才能确定其长度。这可能是最不实用的列表功能。)
一般情况下,k> 1并且列表不为空:
基本案例:
列表短于k的情况将在到达空列表时终止。
赞:
fun delete_ith ([], k) = []
| delete_ith (x::xs, 1) = xs
| delete_ith (x::xs, k) = x :: delete_ith (xs, k - 1)