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

fre*_*ior 5 ocaml functional-programming list

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

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
Run Code Online (Sandbox Code Playgroud)

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

nlu*_*oni 4

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

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

你可以直接编写你的函数,而不需要aux函数。

let rec last = function
  | x::[] -> x
  | _::xs -> last xs
  | []    -> failwith "no element"
Run Code Online (Sandbox Code Playgroud)