OCaml 函数:替换列表中的元素

ASD*_*ito 5 ocaml functional-programming

我是 OCaml 的新手,需要一个简单的函数来替换列表中的元素。

一段时间后,我开始完成这项工作,但我不希望在函数中使用这个 count 参数。

let rec replaceelem ls x elem count=
  match ls with
  | [] -> ls
  | h::t -> if (count = x) then
          elem::(replaceelem t x elem (count+1))
        else
          h::(replaceelem t x elem (count+1))
Run Code Online (Sandbox Code Playgroud)

例子

# let a = [1;2;3;4;5];;
val a : int list = [1; 2; 3; 4; 5]
# replaceelem a 3 99 0;;
- : int list = [1; 2; 3; 99; 5]
Run Code Online (Sandbox Code Playgroud)

Pie*_* G. 5

使用 List.mapi - 它在遍历列表时提供元素的索引 -

let replace l pos a  = List.mapi (fun i x -> if i = pos then a else x) l;;
Run Code Online (Sandbox Code Playgroud)