Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile
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