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

时间:2016-05-07 17:46:12

标签: functional-programming ocaml

我是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))

实施例

# 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]

2 个答案:

答案 0 :(得分:2)

使用List.mapi - 在列表中提供元素的索引 -

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

答案 1 :(得分:0)

如果您想摆脱多余的输入(计数),则可以通过运行x-1来跟踪函数内部与所需索引(您要替换的索引)之间的关系在递归调用中并在x = 0时替换正确的元素。像这样:

let rec replaceelem ls x elem =
  match ls with
  | [] -> ls
  | h::t -> if (x=0) then
              elem::(replaceelem t (x-1) elem)
            else
              h::(replaceelem t (x-1) elem)