Tableau [Caml] - Divers - Programmation
Marsh Posté le 22-10-2006 à 20:29:18
Wouah... c'est un post sans réponse qui date d'il y a longtemps...
Je vais y répondre quand même :
Tu as créé un tableau de tableaux, ce qui est courant...
Cependant, le tableau "dedans" (celui qui représente les "lignes" ) n'est créé qu'une seule fois !
Donc quand tu fais l'effet de bord (l'affectation), tu modifies une seule case d'un seul tableau, mais qui est pointé par chaque ligne...
Bon, alors en pratique, ça donne :
let a = Array.create_matrix 12 12 2;;
a.(5).(5) <- 0;;
a;;
[|[|2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 0; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2|]|]
Ou bien :
let a = Array.map (fun _ -> Array.create 12 2) (Array.create 12 [||]) ;;
a.(5).(5) <- 0;;
a;;
[|[|2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 0; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2|]|]
Ca aurait eu exactement le même comportement en C ou dans un autre langage impératif (j'exclus les langages sans effet de bords, comme Haskell parce que je ne sais pas comment on fait dans ces cas-là)
Marsh Posté le 21-05-2006 à 16:26:53
Salut
J'ai un petit problème sur mon programme en Caml.
Je n'arrive pas à créer de tableaux de longueur paramétrable.
Exemple :
let a = (Array.create 12 (Array.create 12 2));;
a.(5).(5) <- 0;;
a;;
- : int array array =
[|[|2; 2; 2; 2; 2; 0; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 0; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 0; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 0; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 0; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 0; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 0; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 0; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 0; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 0; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 0; 2; 2; 2; 2; 2; 2|];
[|2; 2; 2; 2; 2; 0; 2; 2; 2; 2; 2; 2|]|]
Voila mon problème, toute la cinquième colonne est rempli de 0 alors que je voudrai juste la cinquième case de la cinquième colonne.
Si quelqu'un avait une solution.
Merci