let rec remove x = function
y :: l when x = y -> l
|y :: l (* x <> y *) -> y :: remove x l
|[] -> []
书上说这个函数有一个问题:当找不到元素时,整个列表被不必要地复制了。因此,给出了以下改进版本。
exception Unchanged
let rec remove_inner x = function
y :: l when x = y ->
l
|y :: l ->
y :: remove_inner x l
|[] ->
raise Unchanged
let remove x l =
try remove_inner x l with
Unchanged ->
l
我不太明白这里的意思。