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