如何访问 ocaml 列表中的最后一个元素

How can you access the last element in a list in ocaml

我知道在使用 ocaml 模式匹配时可以使用 h::t 当使用这个时,h 指的是列表中的第一个元素,而 t 指的是列表的其余部分。是否可以使用这种相同类型的匹配来获取列表中的最后一个元素。所以 t 将引用最后一个元素,而 h 将引用列表的其余部分。

一个有用的代码示例是

let rec remove x y = match y with
  [] -> x
| h::t -> remove (remove_element x (get_last y)) h
;;

不,没有匹配列表末尾的模式。它在 OCaml 中不是一个有吸引力的结构,因为它需要线性时间来找到列表的末尾。 OCaml 模式匹配应该很快。

您可以反转列表并匹配反转列表的开头。它只是比查找列表末尾慢的常数因子。

如果你想得到最后一个元素,那么你可以递归遍历列表,直到遇到这种情况:| [x] -> x

正如其他答案所说,您必须 traverse/reverse 列表才能访问它。

根据具体问题,您可以考虑使用其他数据结构。

OCaml 的标准库提供了 Queue,您可能会感兴趣: http://caml.inria.fr/pub/docs/manual-ocaml/libref/Queue.html