我正在努力学习F#的基础知识,并想知道如何以递归方式替换列表中的元素。所以你会做这样的事情。
答案 0 :(得分:4)
let replace index sub = List.mapi (fun i x -> if i = index then sub else x)
replace 0 'd' ['a';'b';'c']
> val it : char list = ['d'; 'b'; 'c']
这符合您的标准,只需进行两项小改动,使其更符合F#风格:
答案 1 :(得分:1)
我联系的答案的修改直接回答了问题:
let rec insert v i l = //v - value to substitute, i - index at which to substitute, l - the list
match i, l with
| 0, x::xs -> v::xs //this line does the actual replace
| i, x::xs -> x::insert v (i - 1) xs //simply iterates one further through the list
| i, [] -> failwith "index out of range" // the given index is outside the bounds of the list
请注意,这不是尾递归,而且Stackoverflow适用于大型列表。如果你需要进行这种类型的操作,数组或列表可能是更好的选择。