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 :

[caml light] copie de vecteurs


Sujet :

Caml

  1. #1
    Inactif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 136
    Points : 25
    Points
    25
    Par défaut [caml light] copie de vecteurs
    J'ai une petite question : si a est un vecteur et f une fonction, est-ce que "let b= f a", lorsque f est l'identité, permet de créer un vecteur b indépendant de a, ou est-ce qu'il faut écrire "let b= copy_vect (f a)" ?

  2. #2
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Salut !

    J'ai une petite question : si a est un vecteur et f une fonction, est-ce que "let b= f a", lorsque f est l'identité, permet de créer un vecteur b indépendant de a, ou est-ce qu'il faut écrire "let b= copy_vect (f a)" ?
    Le test est très facile à faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    let testf f =
      let x = [| 1; 2; 3 |] in
      let y = f x in
      y.(0) <- 2;
      x = y
    Il suffit de comparer le résultat de testf (fun x -> x) (= true) et testf Array.copy (= false). Donc la réponse est non. L'identité est une identité, pas une copie ! Il faut utiliser Array.copy (vect_copy avec caml-light) pour le faire.

    Cordialement,
    Cacophrène

  3. #3
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Salut !

    Citation Envoyé par elishac
    Dans ces conditions, d'après le post précédent, si le calcul de R donne A, est-ce qu'une modification de R effectue une modification de A ?
    Une règle simple à appliquer quand on utilise les tableaux :

    (1)
    si on veut faire des effets de bord, c.-à-d. modifier le contenu des cases du tableau sur place, on ne fait pas de copie. Dans ce cas, la fonction renvoie généralement unit. (2) Si on veut coder sans effets de bord, c.-à-d. renvoyer un nouveau tableau, on crée une copie (copy_vect ou Array.copy) locale avant toute modification. C'est généralement cette copie qui est renvoyée comme résultat de la fonction.

    À toi de voir ce que tu veux faire de ta fonction inverse_pol. Remarque : on a le choix parce que caml est un langage fonctionnel impur. Ceci dit, il faut se méfier des effets de bord et il n'est donc généralement pas recommandé d'en faire, sauf si c'est justifié (par exemple, recopier des tableaux de très grande taille peut être pénalisant ou rhédibitoire). Anti-remarque : les tableaux ont été implémentés comme modifiables sur place (mutable)...

    Citation Envoyé par elishac
    Par ailleurs, pouvez-vous me dire si la procédure vous semble correcte ou améliorable ?
    A priori le recours massif aux traits impératifs indique qu'il y a matière à réécrire le code d'une façon plus idiomatique. D'ailleurs, les codes qui contiennent des boucles for et surtout while sont généralement plus difficiles à prouver, quand c'est demandé (recherche d'un invariant de boucle et tout ce qui s'ensuit).

Discussions similaires

  1. programmation en caml light
    Par sicav dans le forum Caml
    Réponses: 36
    Dernier message: 20/04/2007, 22h27
  2. [Caml Light] Nombre de bits
    Par Nilss dans le forum Caml
    Réponses: 4
    Dernier message: 23/03/2007, 20h32
  3. [Caml Light] Librairie 'graphics" et Linux
    Par paf le chiot dans le forum Caml
    Réponses: 11
    Dernier message: 16/03/2007, 18h16
  4. Typage Caml light (je suis totalement perdu!)
    Par ficarre dans le forum Caml
    Réponses: 11
    Dernier message: 24/02/2007, 14h42
  5. Réponses: 3
    Dernier message: 07/12/2006, 10h15

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