从序列中删除元素的函数

问题描述 投票:0回答:1

我做了一个函数来从序列中删除第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[])时,它不会引发异常,我不知道为什么。

ocaml
1个回答
4
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.