Petite récursion problematique en scheme
marina
-
alios -
alios -
Bonjour, je dois écrire une fonction qui rend les n derniers réels d'une liste , le nième inclus , voici un exemple :
(derniers '( 4 5 6 8) 2) -> (6 8) , j'ai bien les 2 derniers inclus , voici mon code :
(define (derniers L n)
(if (pair? L)
(if (>= n 1)
(cons (cdr L)
(derniers (cdr L) (- n 1)))
(list))
(list)))
mais ça ne colle pas , quelqu'un aurait une idée pour m'aider ?
merci bien .
(derniers '( 4 5 6 8) 2) -> (6 8) , j'ai bien les 2 derniers inclus , voici mon code :
(define (derniers L n)
(if (pair? L)
(if (>= n 1)
(cons (cdr L)
(derniers (cdr L) (- n 1)))
(list))
(list)))
mais ça ne colle pas , quelqu'un aurait une idée pour m'aider ?
merci bien .
A voir également:
- Petite récursion problematique en scheme
- Petite amie virtuelle en français gratuit - Accueil - Intelligence artificielle
- Petite cle en haut a droite samsung - Forum Samsung
- Petite croix snap ✓ - Forum Snapchat
- Petite majuscule word ✓ - Forum MacOS
- La fonction "petites majuscules" ne fonctionne plus ✓ - Forum Word
3 réponses
Bonjour,
Voici l'algo:
(fonction derniers Liste N)
Si (N < 0) retourner ()
Sinon Si (Longueur L) <= N retourner L
Sinon appeler (derniers (cdr L) N)
et voici le scheme
(define (derniers L n)
(if (< n 0) ()
(if (<= (length l) n) L
(derniers (cdr L) n))))
; test
(define L '( 4 5 6 8))
(derniers L 2) ; => (6 8)
Salut.
Voici l'algo:
(fonction derniers Liste N)
Si (N < 0) retourner ()
Sinon Si (Longueur L) <= N retourner L
Sinon appeler (derniers (cdr L) N)
et voici le scheme
(define (derniers L n)
(if (< n 0) ()
(if (<= (length l) n) L
(derniers (cdr L) n))))
; test
(define L '( 4 5 6 8))
(derniers L 2) ; => (6 8)
Salut.
Effectivement c'est pas joli, sur mon interpreteur Scheme ça fonctionne, je ne sais pas si c'est vraiment correct
En fait je cherche à écrire : si longueur L <= n alors L=L
En lisp 'airais mis : (if (<= (length L) n) (setq L L) ; (setq L L) retourne L, mais ça n'existe pas en scheme.
Si tu sais comment le dire en scheme , ecrit le et dit moi aussi comment on fait, ma doc est en englais et je n'ai pas trouvé. Sinon j'ai essayé une autre syntaxe qui marche : la voici
Peux tu dire comment on fait une assignation du genre A=B ? Ce sera utile pour les prochains exos.
En fait je cherche à écrire : si longueur L <= n alors L=L
En lisp 'airais mis : (if (<= (length L) n) (setq L L) ; (setq L L) retourne L, mais ça n'existe pas en scheme.
Si tu sais comment le dire en scheme , ecrit le et dit moi aussi comment on fait, ma doc est en englais et je n'ai pas trouvé. Sinon j'ai essayé une autre syntaxe qui marche : la voici
(define (derniers L n)
(if (< n 0) (list () )
(if (<= (length l) n) (car(list L))
(derniers (cdr L) n))))
(define L '( 4 5 6 8))
(derniers L 2)
Peux tu dire comment on fait une assignation du genre A=B ? Ce sera utile pour les prochains exos.
Bon ce n'est pas grave, je chercherai.
La première syntaxe que tu ne trouve pas jolie est correcte , il y a des exemples dans ma doc qui sont écrits comme ça.
Tu as un interpréteur scheme pour travailler? Est ce tu peux tester les exos? C'est pour vérifier si le tien réagit pareil que le mien.
La première syntaxe que tu ne trouve pas jolie est correcte , il y a des exemples dans ma doc qui sont écrits comme ça.
Tu as un interpréteur scheme pour travailler? Est ce tu peux tester les exos? C'est pour vérifier si le tien réagit pareil que le mien.
je me suis renseigné sur ton probleme amigo et.....
apparament y a pas d'autre solution que celle que ta écrit (C-A-D avec la fonction lenght)
C'est l'avis des expert auquel j'ai demandé.
En fait pourrait y avoir une autre solution mais j'suis pas sure à 100% et c'est pas recommandé (j'sais pas pourquoi
dailleurs mais je vais me renseigné et je te mets au courant)
apparament y a pas d'autre solution que celle que ta écrit (C-A-D avec la fonction lenght)
C'est l'avis des expert auquel j'ai demandé.
En fait pourrait y avoir une autre solution mais j'suis pas sure à 100% et c'est pas recommandé (j'sais pas pourquoi
dailleurs mais je vais me renseigné et je te mets au courant)
(if (<= (length L) n)
L
je trouve pas ça joli ( mais je me trompe peut etre ) , d'écrire seulement L , ya pas moyen d'écrire autrement qu'on renvoit la liste considérée ?
merci