IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

Problème avec caml-light


Sujet :

Caml

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Problème avec caml-light
    Bonjour je suis en ce moment en train de faire un programme qui utilise des matrices de polynômes. Comme je cherche pas à utiliser des polynômes de degré supérieur à 5 ou 6 j'utilise des tableaux pour représenter les polynômes et des tableaux de tableaux pour les matrices.

    Mon problème est le suivant j'ai un algorithme permettant de calculer la division euclidienne entre 2 polynômes et lorsque je cherche à faire la division euclidienne entre deux éléments de ma matrice M cette matrice se retrouve changée et je ne comprends pas pourquoi.
    Par exemple si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     let m = matrice_de_polynomes in
    div_euclidienne m.(1).(1) m.(0).(0);
    m
    ;;
    la matrice m obtenue en fin de programme n'est plus la même qu'au départ alors que je ne la modifie pas.

    Auriez-vous une idée du pourquoi est-ce que la matrice m est modifiée ?
    Merci.

  2. #2
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Salut kazuma.

    En caml (light ou objective), les tableaux (et par conséquent les matrices) ne sont pas des objets fonctionnels comme on en a l'habitude (comme les listes). Quand tu affectes un tableau, tu affectes en réalité une référence vers ce tableau : il n'y a pas de copie.

    Ainsi, si t est un tableau et que tu fais ce qui suit, BAM ! surprise !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    let bilbolehobbit = t in
    print_int t.(0) ; (* affiche 0 *)
    bilbolehobbit.(0) <- 42 ;
    print_int t.(0) ; (* affiche 42 *)
    Pour plus d'info, consulter le manuel de caml light. On peut t'aider à identifier plus précisément ton problème si tu nous montrais le code de tes deux fonctions.

    Cdlt,
    -- Yankel Scialom

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Après test il y a seulement ma fonction de division euclidienne qui pose problème la voilà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    let div_eucl a b =
    let degA = degre a and degB= degre b  in
    if degB= -1 then failwith "erreur division par 0" 
     
    else if degA < degB 
    	then (([|0.0|],-1),(a,degA))
    else begin
    	let degQ = degA - degB in
    	let Q = make_vect (degQ+1) 0.0 and R=ref(a) and b_n = b.(degB) in
    	for i = degA downto degB do
    		let x = !R.(i) /. b_n in
    		Q.(i-degB) <- x;
    		for j = 0 to degB do
    			!R.(i+j-degB) <- !R.(i+j-degB) -. b.(j) *. x
    		done;
    	done;
    	let R' = simplifie (!R) in 
    	let degR = degre R' in
    	((Q,degQ),(R',degR)) ;
    end;;
    donc voilà plus précisément le problème pour la matrice

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    let e = [| 
    			[| [|1.|];[|1.;2.|];[|0.;1.|] |] ;
    		  [| [|-1.;1.|];[|1.|];[|0.;0.|] |] ;
    		  [| [|2.;2.|];[|-2.|];[|-2.;1.|] |] 
    		  |] ;;
    si j'applique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    div_eucl e.(1).(0) e.(0).(0);;	
    e;;
    la matrice renvoyée est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     [|[|[|1.0|]; [|1.0; 2.0|]; [|0.0; 1.0|]|];
       [|[|0.0; 0.0|]; [|1.0|]; [|0.0; 0.0|]|];
       [|[|2.0; 2.0|]; [|-2.0|]; [|-2.0; 1.0|]|]|]

  4. #4
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    C'est pire que ce que je croyais : tu modifies directement a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    !R.(i+j-degB) <- !R.(i+j-degB) -. b.(j) *. x
    R étant définie par
    -- Yankel Scialom

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Ah ouais effectivement merci bien prgasp77 j'ai réussi à régler le problème.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'Event avec Caml Light
    Par Soshius dans le forum Caml
    Réponses: 4
    Dernier message: 25/11/2009, 10h37
  2. Problème avec CAML
    Par mimosa803 dans le forum SharePoint
    Réponses: 4
    Dernier message: 11/04/2008, 08h54
  3. Problème avec le "light mapping" OpenGL ?
    Par zambizi dans le forum OpenGL
    Réponses: 6
    Dernier message: 02/03/2008, 11h09
  4. pb pour forcer un typage avec caml-light
    Par Moi_Emilie dans le forum Caml
    Réponses: 24
    Dernier message: 19/04/2007, 09h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo