【发布时间】:2019-04-16 23:19:04
【问题描述】:
编写一个删除列表中第 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
感谢您的帮助。
【问题讨论】:
-
您不需要辅助函数或
length。列表和索引都是您需要的参数。 (提示:倒计时而不是倒计时。) -
谢谢,我想出了如何获得我想要的输出。但是如果没有辅助函数,我该怎么做呢。