列表中的最后一个元素使用ocaml List.fold_left

时间:2013-09-09 13:23:28

标签: list functional-programming ocaml

我可以通过以下代码找到列表的最后一个元素。

let last (xs:'a list) : 'a =
    let rec aux xs prev =
        match xs with
        | [] -> prev
        | x::ys -> aux ys x in
    match xs with
    | [] -> failwith "no element"
    | x::xs -> aux xs x

如何使用OCaml中的List.fold_left函数找到同一列表的最后一个元素? 提前谢谢!

1 个答案:

答案 0 :(得分:4)

fold_left从头到尾访问列表,因此传递给fold_left的函数应该只用列表的当前元素替换累加器。因此,简单地说,

let last = function
  | x::xs -> List.fold_left (fun _ y -> y) x xs
  | []    -> failwith "no element"

您可以直接编写函数,而无需aux函数。

let rec last = function
  | x::[] -> x
  | _::xs -> last xs
  | []    -> failwith "no element"