Bonjour

Alors je cherche à réaliser une fonction sous Ocaml qui fait une rotation d'une chaîne de caractères et enregistre à chaque tour le résultat dans un tableau de n cases (où n vaut la longueur de la chaîne de caractères).

Par exemple, si je lance : rotate "salut" il devrait me renvoyer :
: - String Array = [|aluts ; lutsa ; utsal ; tsalu ; salut|]
Donc voici le code que j'ai écrit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
let rotation s = 
let n = String.length s in
let tab = Array.make n "vide" and tmp = ref s.[0]  in
	for i = 0 to n-1 do
	tmp := s.[0];
		for i2 = 0 to n-2 do 
			s.[i2] <- s.[i2 + 1];
		done;
		s.[n-1]<- !tmp;
		tab.(i) <- s;
 
	done;
	tab;;
et malheuresement il me retourne :
: - String Array = [|salut ; salut ; salut ; salut ; salut|]
qui est la dernière valeur de s; pourtant s passe bien par toutes les valeurs souhaitées et ces valeurs sont bien enregistrées dans le tableau. Seulement, il réécrit toujours au dessus :
pour i = 0 le tableau est
[|aluts;vide;vide;vide;vide|]

pour i = 1 le tableau est
[|lutsa; lutsa ; vide ;vide;vide|]


pour i = 3 le tableau est
[|uttsal; utsal ; utsal ;vide;vide|]

etc...
Et c'est là que je ne comprends pas car j’insère s dans dans la case du tableau qui correspond à i alors pourquoi les cases du tableau qui sont plus petites que i changent aussi ?

Merci.