Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > Scheme
Scheme Forum d'entraide sur la programmation en langage fonctionnel Scheme
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/02/2011, 02h23   #1
borough
Invité de passage
 
debit
Inscription : février 2011
Messages : 10
Détails du profil
Informations personnelles :
Nom : debit

Informations forums :
Inscription : février 2011
Messages : 10
Points : 0
Points : 0
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 :
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 :
procedure application: expected procedure, given: (3 4); arguments were: (2 3 6)

de l'aide SVP!!!
borough est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2011, 10h26   #2
Trap D
Rédacteur/Modérateur
 
Avatar de Trap D
 
Inscription : septembre 2003
Messages : 4 436
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 4 436
Points : 5 301
Points : 5 301
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 : Intérieur avec jeune femme de Vilhelm Hammershoi
Trap D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2011, 11h04   #3
borough
Invité de passage
 
debit
Inscription : février 2011
Messages : 10
Détails du profil
Informations personnelles :
Nom : debit

Informations forums :
Inscription : février 2011
Messages : 10
Points : 0
Points : 0
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.
borough est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2011, 11h25   #4
Trap D
Rédacteur/Modérateur
 
Avatar de Trap D
 
Inscription : septembre 2003
Messages : 4 436
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 4 436
Points : 5 301
Points : 5 301
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 : Intérieur avec jeune femme de Vilhelm Hammershoi
Trap D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 18h28   #5
bondak
Invité de passage
 
Inscription : mai 2007
Messages : 4
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 4
Points : 2
Points : 2
Bonjour,
Voici la procédure corrigée

Code :
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)))))))
bondak est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 12h07.


 
 
 
 
Partenaires

Hébergement Web