在普通的lisp中,我们可以使用
remove
函数。
OCaml里好像没有这个方法?
OCaml 中的列表是不可变的。所以你不能从他们身上删除东西。您通常会创建另一个列表,其中没有您不想要的东西。为此,您将使用
List.filter
.
如果你绝对必须有可变列表,你可以。在 Batteries 中有一个叫做 Dllist 的东西,它可能就像你想要的那样。 (然而,它是一个双向链表,与 Lisp 列表不同)。
在我看来,OCaml 的一大优点是纯函数子集非常有效。我从来不需要在我自己的项目中使用可变列表。
以下代码返回一个新列表,该列表从列表“l”中删除与指定“v”相等的元素。
let remove l v equal =
let rec aux l' v acc =
match l' with
| None -> acc
| hd :: tl ->
if equal hd v then
aux tl v acc
else
aux tl v (hd :: acc)
in
aux l v []