2016-05-07 52 views
2

我是OCaml的新手,需要一個簡單的函數來替換列表中的元素。OCaml函數:替換列表中的元素

過了一段時間,我得到了這個工作,但我不希望這個計數參數在函數中。

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] 
+1

包裝你replaceelem FUNC與其他功能,只需要新elem和舊列表,並從該函數內調用遞歸版本。 –

回答

1

使用List.mapi - 它提供了元素的索引經歷的名單,而 -

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

謝謝,現在就使用這個。 –