我做了一个函数来从序列中删除第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[])
时,它不会引发异常,我不知道为什么。
你的函数remove_at
期望不是两个,而是三个参数:一个整数,一个序列和单位值()
。
当你调用remove_at 0 (of_list[])
时,它实际上并没有调用函数,而是在执行之前等待最后一个参数()
。
所以,你想调用remove_at 0 (of_list[]) ()
来有效地看到会发生什么。