从序列中删除元素的函数

时间:2018-04-18 14:18:10

标签: ocaml

我做了一个从序列中删除第n个元素的函数。这是代码

let rec remove_at i s () =
  if i < 0 then
    invalid_arg "Seq.remove"
  else
    match s () with
    | Nil ->  invalid_arg "Seq.remove_at"
    | Cons(e, s) -> if i = 0 then s () else Cons(e, remove_at (i - 1) s)

但是当我测试例如remove_at 0 (of_list[])时,它不会引发异常,我不知道为什么。

1 个答案:

答案 0 :(得分:4)

你的函数remove_at期望不是两个,而是三个参数:一个整数,一个序列和单位值()

当你致电remove_at 0 (of_list[])时,它实际上并没有调用该函数,而是在执行之前等待最后一个参数()

所以,你想调用remove_at 0 (of_list[]) ()来有效地看看会发生什么。