F # insérer / supprimer un élément de la liste

Comment dois-je aller sur la suppression d'un élément donné dans une liste? Par exemple, dire que j'ai la liste ['A'; 'B'; 'C'; 'D'; 'E'] et que vous souhaitez supprimer l'élément à l'indice 2 pour produire la liste ['A'; 'B'; 'D'; 'E']? Je l'ai déjà écrit le code suivant qui accomplit la tâche, mais il semble plutôt inefficace pour traverser le début de la liste quand je connais déjà l'index.

let remove lst i =
    let rec remove lst lst' =
        match lst with
        | []   -> lst'
        | h::t -> if List.length lst = i then
                      lst' @ t
                  else
                      remove t (lst' @ [h])
    remove lst []

let myList = ['A'; 'B'; 'C'; 'D'; 'E']
let newList = remove myList 2

Sinon, comment dois-je insérer un élément à une position donnée? Mon code est similaire à l'approche ci-dessus et probablement inefficace.

let insert lst i x =
    let rec insert lst lst' =
        match lst with
        | []   -> lst'
        | h::t -> if List.length lst = i then
                      lst' @ [x] @ lst
                  else
                      insert t (lst' @ [h])
    insert lst []

let myList = ['A'; 'B'; 'D'; 'E']
let newList = insert myList 2 'C'

source d'informationauteur Timothy