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

Jam*_*aro 6 ocaml list pattern-matching

我知道当使用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
;;
Run Code Online (Sandbox Code Playgroud)

Jef*_*eld 5

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

您可以反转列表并匹配反向列表的开头.它只是一个比查找列表末尾慢的常数因素.

  • 标准库中已存在反向函数:`List.rev` (4认同)

ayc*_*ycc 5

如果要获取最后一个元素,则可以递归遍历列表,直到遇到这种情况: | [x] -> x