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 :

Problème avec les listes


Sujet :

Scheme

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Problème avec les listes
    bonjour, je suis en L2 info et j'ai le problème suivant: j'ai trois listes à trois éléments (la troisième est obtenue en faisant la somme membre à membre des deux premières) et je veux créer une liste qui a pour éléments les trois listes précédentes. je suis donc arrivé à ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    (define ex1 '(1 2 3))
    
    (define ex2 '(4 5 6))
    
    (define somme (list (+ (car ex1) (car ex2)) (+ (cadr ex1) (cadr ex2)) (+ (cadr (cdr ex1)) (cadr (cdr ex2)))))
    
    (define liste_finale (list ex1 ex2 somme))
    le problème est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    > liste_finale   
    ((1 2 3) (4 5 6) (5 7 9))
    
    > (set-car! ex1 199)
    
    > liste_finale
    ((199 2 3) (4 5 6) (5 7 9))
    alors que je voudrais à la place du 5, avoir 203 (199+4).
    merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    si tu veux que liste_des_sommes se modifie dès que liste1 ou liste2 se modifient.... il faut passer par de l'événementiel ou une fonction spécifique pour modifier les dites-listes
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    merci, g réussi à le faire en comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    (define (somme ex1 ex2) (list (+ (car ex1) (car ex2))
                                            (+ (cadr ex1) (cadr ex2)) 
                                            (+ (cadr (cdr ex1))
                                            (cadr (cdr ex2)))))
    
    (define (liste_finale ex1 ex2) (list ex1 ex2 (somme ex1 ex2)))

  4. #4
    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
    Pour cet exercice, je te conseille de te pencher sur le mécanisme quasiquote unquote :
    Ce code
    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
    (define ex1 '(1 2 3))
    (define ex2 '(4 5 6))
    
    (define somme `(list (+ (car ex1) (car ex2)) 
                                (+ (cadr ex1) (cadr ex2)) 
                                (+ (caddr ex1) (caddr ex2))))
    
    (define liste_finale 
       `(list ex1 ex2 ,somme))
    
    (eval liste_finale)
    
    (set-car! ex1 199)
    
    (eval liste_finale)
    Produit en sortie :
    ((1 2 3) (4 5 6) (5 7 9))
    ((199 2 3) (4 5 6) (203 7 9))
    Tu aurais pu programmer ta variable somme de cette manière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (define somme `(map + ex1 ex2))
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    merci pour le tuyau, c'est justement ce dont j'avais besoin. En ce qui concerne le "map", je crois que c'est un peu chaud dans mon cas car je n'ai pas précisé que dans l'ensemble des liste à additionner, j'en ai du genre '(? ? ?). j'ai donc fait une fonction spéciale pour l'addition.
    thanks

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

Discussions similaires

  1. Problème avec les listes chaînées
    Par yous18 dans le forum C
    Réponses: 38
    Dernier message: 25/10/2007, 22h30
  2. Problème avec les listes de valeurs
    Par yalla3 dans le forum Débuter
    Réponses: 2
    Dernier message: 03/05/2007, 15h36
  3. [TP 7] Problème avec les listes chaînées (error 202)
    Par thelinekioubeur dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 06/12/2006, 23h15
  4. Problème avec les listes
    Par aliassaf dans le forum Général Python
    Réponses: 3
    Dernier message: 10/07/2006, 17h57

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