Une question Erwane : tu as vu la structure "let" dans ton cours, ou pas encore ?
guillem , oui j'ai vu let mais j'abandonne l'exercice .
vince : non je peux vraiment pas supporter de pomper un code tout fait je préfère encore avoir des points en moins .
Ne parlons plus de cet exercice je verrai bien quelle correction on a .
C'est ton choix mais comme l'a dit Garulfo, je pense pas que ça soit dans ton intérêt.
Essaye de voir l'algo comme une preuve récursive :
- Cas de base : liste vide donc > (list 0 0) car 0 élément
- Sinon, soit HR (hypothèse de récurrence) la liste des nombres d'éléments pairs et impairs du reste de L (comment vas-tu obtenir cette liste des deux nombres ? ...). Comme tu es toujours sur le premier élément de la liste (le reste on s'en occupe pas, on suppose que l'hypothèse de récurrence a fait du bon travail). En fonction de ce premier élément (pair ou impair) on ajoute 1 au bon endroit de HR.
That's all.
Je sais pas si je suis très clair mais bon, c'est l'algo que j'implémenterais tout naturellement pour ce problème.
Tu avais presque trouvé la solution en faisant :
il te manquait juste la derniere ligne ou tu aurais pu utiliser (list ..) ou si tu voulais garder cons :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 (define (P-I L) (define (paire L) (if (pair? L) (if (even? (car L)) (+ 1 (paire (cdr L))) (paire (cdr L))) 0))
(- L (paire L)) ne veux rien dire, tu essaye de soustraire un nombre a une liste alors qu'il suffit de soustraire au nombre total d'élément, le nombre d'élément paire tout simplement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 (cons (paire L) (cons (- (length L) (paire L)) '()))
Regarde comment utiliser cons :
(cons X (cons Y (cons Z '() ))) pour avoir qqchose du type (X Y Z), il faut que le dernier élément soit la liste vide.
Si tu connais (list ..), c'est plus lisible (avis personnel)
Utilise cons quand tu ne sais pas combien d'éléments tu va avoir dans ta liste, sinon list. En gros c'est un peu l'idée
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 (list (paire L) (- (length L) (paire L)))
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager