从 OCaml 列表中删除元素的标准方法是什么?

问题描述 投票:0回答:2

在普通的lisp中,我们可以使用

remove
函数。

OCaml里好像没有这个方法?

ocaml
2个回答
19
投票

OCaml 中的列表是不可变的。所以你不能从他们身上删除东西。您通常会创建另一个列表,其中没有您不想要的东西。为此,您将使用

List.filter
.

如果你绝对必须有可变列表,你可以。在 Batteries 中有一个叫做 Dllist 的东西,它可能就像你想要的那样。 (然而,它是一个双向链表,与 Lisp 列表不同)。

在我看来,OCaml 的一大优点是纯函数子集非常有效。我从来不需要在我自己的项目中使用可变列表。


0
投票

以下代码返回一个新列表,该列表从列表“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 []
© www.soinside.com 2019 - 2024. All rights reserved.