6

次のコードで、リストの最後の要素を見つけることができます。

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

List.fold_leftOCamlの関数を使用して同じリストの最後の要素を見つけるにはどうすればよいですか? 前もって感謝します!

4

1 に答える 1

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"
于 2013-09-09T13:49:54.733 に答える