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 :

Je ne sais pas où est l'erreur…


Sujet :

Scheme

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Je ne sais pas où est l'erreur…
    Bonjour à tous;

    Je désire fusionner deux listes triées en skiiiiim pour obtenir une seule liste triée. voici mon programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    (define fusion
      (lambda(Ls Ys)
        (cond ((null? Ls) Ys)
              ((null? Ys) Ls)
              ((< (car Ls) (car Ys)) (cons (car Ls) fusion((cdr Ls) Ys)))
              (else 
               (cons (car Ys) fusion(Ls (cdr Ys)))))))
    (fusion '(1 3 4) '(2 3 6))
    et l'erreur que m'affiche "drracket" est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure application: expected procedure, given: (3 4); arguments were: (2 3 6)

    de l'aide SVP!!!

  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
    Problème de parenthèses : lorsque tu écris (Ls (cdr Ys)) cela signifie que tu appliques la fonction de nom L à (cdr Ys) ce que tu ne peux pas faire puisque L est le nom d'une liste, même erreur pour ((cdr Ls) Ys).
    par contre je suppose que lorsque tu écris (cons (car Ys) fusion(Ls (cdr Ys))) tu veux concaténer le car de Y au résultat de la fusion de Ls avec le cdr de Ys, la il manque peut être une parenthèse quelque part...
    Je te laisse méditer un peu sur tout ça.
    "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

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Points : 9
    Points
    9
    Par défaut response
    merci pour la réponse;

    lorsque j'ai écrit fusion(Ls (cdr Ys)), ceci c'est un appel récursif de la fonction fusion qui prend en argument la premiere liste Ls et la queue de la deuxième liste Ys. Bref, je vais expliquer le fonctionnement de mon programme de tri:

    . Si une des listes est vide alors renvoyer l'autre liste
    . Sinon, on compare à chaque fois les deux têtes des deux listes et on construit la liste des minimum extraits à chaque étape.


    Alors, j'ai tout essayé mais en vain.

  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
    Oui,mais tu as oublié une parenthèse avant fusion.
    "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
    Mai 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Bonjour,
    Voici la procédure corrigée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    (define fusion
      (lambda (Ls Ys)
        (cond 
          ((null? Ls) Ys)      
          ((null? Ys) Ls)          
          ((< (car Ls) (car Ys)) 
           (cons (car Ls) 
                 (fusion (cdr Ls) Ys)))     
          (else 
           (cons (car Ys) 
                 (fusion Ls (cdr Ys)))))))

Discussions similaires

  1. Je ne trouve pas ou est l'erreur dans mon programme
    Par stich51 dans le forum Général Python
    Réponses: 3
    Dernier message: 02/05/2014, 16h36
  2. [VC#] - Je ne comprends pas ou est mon erreur !
    Par epc dans le forum Windows Forms
    Réponses: 32
    Dernier message: 03/11/2008, 19h10
  3. je ne sais pas où est le probléme
    Par info_sara dans le forum Flash
    Réponses: 3
    Dernier message: 18/06/2008, 22h23
  4. Réponses: 5
    Dernier message: 24/04/2008, 17h55
  5. Réponses: 13
    Dernier message: 30/01/2006, 14h21

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