let rec remove x = function
y :: l when x = y -> l
|y :: l (* x <> y *) -> y :: remove x l
|[] -> []
該書說這個函數有一個問題:當找不到元素時,整個列表被不必要地複製。因此,給出以下改進版本。OCaml-Exception:控制執行流程以減少內存使用量
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
我不太明白這裏的意思。
謝謝傑弗裏。 – user2821649