Adloun

Trois lignes, trois effets

Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 6 — Types et structures de données abstraites

Énoncé

Que valent l1, t1 et t3 après ces lignes ? Justifier chaque réponse par la mutabilité ou l'immuabilité de la structure en jeu.


let l1 = [1; 2; 3]
let l2 = 0 :: l1

let t1 = [| 1; 2; 3 |]
let t2 = t1
let () = t2.(0) <- 99

let t3 = Array.copy t1
let () = t3.(1) <- 77

Corrigé

Mesuré :


l1 = [1;2;3]          l2 = [0;1;2;3]
apres t2.(0) <- 99 :  t1 = [|99;2;3|]   t2 = [|99;2;3|]
apres t3.(1) <- 77 :  t1 = [|99;2;3|]   t3 = [|99;77;3|]

La règle en une phrase : l'immuabilité achète le partage gratuit. Ce qui coûte, dans le monde mutable, ce n'est pas la modification, c'est la copie défensive qu'il faut faire avant de confier une structure à quelqu'un d'autre.

Et un avertissement sur Array.copy : la copie est superficielle. Si les cases contiennent elles-mêmes des tableaux, ce sont les mêmes tableaux qui se retrouvent dans la copie. C'est mesuré au neuvième exercice.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.