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

Scheme Discussion :

Fonction retournant plusieurs valeurs


Sujet :

Scheme

  1. #1
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut Fonction retournant plusieurs valeurs
    Comment fait-on pour écrire une fonction qui retourne plusieurs valeurs comme dans cet exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >(send maFenetre get-size)
    200 
    300
    >
    200 étant la largeur et 300 la hauteur.

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Salut

    Ma question n'ayant pas passionné les foules, je ne sais pas si la réponse intéressera aussi.

    Dans cet exemple je cherche à extraire les informations d'un fichier txt au format CSV (5 champs séparés par un ';')
    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
    21
    22
    ;; cette fonction extrait un champ d'une chaîne de caractères
    ;; et renvoie une liste formée de 2 chaînes de caractères (ou une seule en fin de ligne)
    ;; exemple (get-un-champs "ab;cd;ef" #\; ) => ("ab" "cd;ef")
    (define (get-champs ll sep)
      (let* ((x ()) (str ll)
             (i1 (string-index str sep)))
            (if (not (eq? i1 #f))
                (list (substring str 0 i1) (substring str (+ i1 1)))
                (list str))))  
    
    ;; cette fonction extrait les différents champs d'une chaîne de caractères
    ;; le letrec-values permet de mémoriser les résultats des appels à get-un-champs
    ;; l'évaluation est séquentielle c'est-à-dire qu'on peut utiliser dans y le résultat obtenu dans x
    ;; values permet de renvoyer les différentes valeurs 
    (define (get-champs ll sep)
      ;; après remarque sur un forum spécialisé j'ai modifié le letrec-value en let*
      (let* ((x (get-un-champs ll sep)) 
               (y (get-un-champs(cadr x) sep))
               (z (get-un-champs (cadr y) sep))
               (t (get-un-champs (cadr z) sep))
               (u (get-un-champs (cadr t) sep)))  
               (values (car x) (car y) (car z) (car t) (car u))))
    Voici un exemple d'appel
    > (get-champs "ab;cd;ef" #\; )
    "ab"
    "cd"
    "ef"
    En supposant défini un objet "article" on peut ainsi construire une liste d'objets
    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
    (define (make-list-objects)
      (let* ((fin (open-input-file "fichier.txt"))
             ;; on definit une fonction locale qui va se charger de fabriquer un article
             ;; à partir de la ligne du fichier CSV
             (x (let lecture-fic ((f fin))
                    (let ((str (read-line f)))
                         (if (not (eof-object? str))
                             (letrec-values (((c1 c2 c3 c4 c5)  (get-champs str #\;)))
                                            (cons (make-article c1 c2 c3 c4 c5)
                                                     (lecture-fic f)
                             )              )
                             ()
            ))  )   )    )
            (close-input-port fin)
            x
    ) )
    Je pense donc mettre mais je suis intéressé par toute autre méthode possible.

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

Discussions similaires

  1. Fonction qui retourne plusieurs valeurs !
    Par casafa dans le forum C++
    Réponses: 20
    Dernier message: 23/04/2014, 16h56
  2. Réponses: 1
    Dernier message: 22/10/2009, 14h34
  3. Fonction d'une DLL qui retourne plusieur valeur
    Par vtk37 dans le forum Débuter
    Réponses: 9
    Dernier message: 27/05/2009, 10h01
  4. Fonction retournent plusieurs valeurs
    Par Futixu dans le forum C++
    Réponses: 18
    Dernier message: 15/06/2006, 22h49
  5. [PL/SQL] Fonction qui retourne plusieurs valeurs
    Par Loko dans le forum Oracle
    Réponses: 2
    Dernier message: 07/12/2004, 09h43

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