Probablement une question triviale pour la plupart des schémas les plus avancés ici, mais en tant que nouveau venu, j'ai trouvé que c'était un problème.Liste des schémas toujours dans l'ordre inverse
J'ai besoin d'un moyen de construire une nouvelle liste dans le même ordre qu'au moment où elle est arrivée. Par exemple, disons que nous avons une liste '(1 2 0 3 4 0 0 5). Mais en parcourant la liste et en renvoyant le cdr, le premier argument finit par construire la nouvelle liste en arrière.
Voici un exemple dans le code:
Je transmets une « ancienne liste » qui a besoin de travail et sur une liste vide comme « nouvelle liste » à former et retourné.
noter que la prise 0s out est juste ici comme « une condition » que la nouvelle liste doit rencontrer
(define (form-new-list old-list new-list)
(cond ((null? old-list) new-list)
(else
(if (eq? (car old-list) 0) (form-new-list (cdr old-list) new-list)
(form-new-list (cdr old-list) (cons (car old-list) new-list))))))
;test
(form-new-list '(1 2 0 3 4 0 0 5) '()) ; gives (5 4 3 2 1)
;but want (1 2 3 4 5)
JE NE veux juste inverser la liste qui est renvoyée par une procédure inverse, mais plutôt, voulez que la nouvelle liste soit mise dans l'ordre correct en premier lieu.
Existe-t-il une sorte de "truc", comme faire un appel récursif ailleurs?
Tout conseil est grandement apprécié.
Merci Oscar. Je me suis dit qu'il me manquait là où vous faites la récursion là-bas; Consing la voiture à l'appel de procédure du cdr. Merci pour les conseils supplémentaires aussi. J'apprends avec le livre Structure et Interprétation des Programmes Informatiques pour l'instant, mais je vais garder cela à l'esprit. Cette question en particulier était celle que je voulais vraiment aborder. Habituellement, j'ai une méthode "inverse" gérer cela, mais c'est beaucoup mieux. Merci encore. – Matt
De rien! SICP est un livre magnifique, je le recommande absolument, mais il peut être un peu difficile pour les débutants. –