Pages : 1
#1 Le 27/05/2007, à 00:52
- reaver
Programmation Caml
Bonjour,
je bloque sur un programme Caml dont je ne vois absolument pas le sens et sollicite votre aide dessus
On a préalablement programmé une fonction nommée List.iter tel que :
list.iter f [a1,...,an] = [f(a1),...,f(an)]. Ainsi qu'une fonction ajout tel que ajout e l renvoie une liste contenant {e}union l
Soit r une relation binaire. On cherche à programmer la relation inverse r-1.
-------------------------
Let inverse r-1 (*r-1 comme int list array*) =
let res = Array.make b [] in
for i = 0 to a-1 do
list.iter(fun j-> res.(j) <- ajout i res.(j)) r.(i)
done;;
--------------------------
je ne comprend donc rien de ce programme notamment la dernière ligne dont je ne vois pas le sens ni le but !
Merci infiniment pour tous ceux qui m'aideront .
Hors ligne
#2 Le 27/05/2007, à 09:32
- best_friend_fr
Re : Programmation Caml
Salut
list.iter(fun j-> res.(j) <- ajout i res.(j)) r.(i)
Si c'est cette ligne que tu ne comprends pas :
list.iter
prend une fonction et une liste.
La fonction est celle qui sera appliquée à chaque elément de la liste.
(fun j-> res.(j) <- ajout i res.(j))
cette fonction prend en argument un entier j
ensuite, elle ajoute i dans la case j
Tu appliques ca à r.(i) qui est une liste.
En gros, res est la relation inversée de r.
Apparemment, r-1 n'est pas utilisée.
sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr
Hors ligne
#3 Le 27/05/2007, à 09:54
- reaver
Re : Programmation Caml
Merci best_friend_fr, c'est trop gentil de m'expliquer, j'ai donc compris pourquoi cette fonction de list.iter.
Mais je me demande en quoi ce programme permet-il de programmer la relation inverse ?
Hors ligne
#4 Le 27/05/2007, à 19:06
- best_friend_fr
Re : Programmation Caml
Bon, en fait, il faut que tu regarde tes définition.
Tu as les relations rel de N -> N
Ton tableau de départ, r, est fait de telle facon que
r.(i) contient une liste des éléments j tels que rel(i,j).
Ce que tu cherches, c'est définir par un tableau similaire res la relation rel~ qui soit l'inverse (rel~(i,j) ssi rel(j,i)).
Maintenant tu décortiques :
Let inverse r =
Ta fonction prend en argument r (et non r-1) qui est le tableau associé à rel
let res = Array.make b [] in
res (pour resultat, j'imagine, est le tableau associé à rel~.
Donc si tu reprends ce raisonnement, un nombre i doit être dans la liste res.(j) ssi rel~(j,i), donc si rel(i,j), donc si j est dans la liste r.(i).
for i = 0 to a-1 do
On parcourt donc le tableau r
list.iter(fun j-> res.(j) <- ajout i res.(j)) r.(i)
Alors la, on décortique.
déja, on applique une fonction f à tous les éléments j de r.(i), qui sont les éléments j tels que rel(i,j).Et ces éléments j donnent toutes les listes res.(j) auxquelles il faut ajouter i parce que rel~(j,i).
J'espère que je suis plus clair
sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr
Hors ligne
#5 Le 28/05/2007, à 10:14
- reaver
Re : Programmation Caml
Best_friend je te remercie innnnnfiniment pour m'avoir expliqué.
Par contre si j'ai un tableau, ou une matrice, Comment puis-je créer la relation inverse?
Hors ligne
#6 Le 28/05/2007, à 10:41
- best_friend_fr
Re : Programmation Caml
Salut
Tu dois reprendre ce principe.
Parcourir ta structure et inverser les indices pour remplir la structure inversée.
sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr
Hors ligne
Pages : 1