Il modo naturale di ricorrere in un elenco non è il modo migliore per risolvere questo problema. Usare append
, come suggerito nella risposta accettata indicata da @lancery, non è una buona idea neanche - e comunque se stai imparando la tua strada in Scheme è meglio se provi a implementare la soluzione da solo, ti mostrerò cosa fai, ma prima un consiglio: non usare list
come nome parametro, è una procedura integrata e la sovrascriveresti. Usa un altro nome, per esempio, lst
.
È semplice invertire una lista mediante una procedura di supporto che accumula il risultato di consing ciascun elemento in corrispondenza testa del risultato, ciò avrà l'effetto di invertire lista - incidentalmente, la procedura helper è coda -ricorsivo. Ecco l'idea generale, fill-negli spazi vuoti:
(define (reverse lst)
(<???> lst '())) ; call the helper procedure
(define (reverse-aux lst acc)
(if <???> ; if the list is empty
<???> ; return the accumulator
(reverse-aux <???> ; advance the recursion over the list
(cons <???> <???>)))) ; cons current element with accumulator
Naturalmente, nella vita reale non sarebbe implementare reverse
da zero, c'è un built-in procedure per questo.
fonte
2013-02-25 00:16:19
Ti aspetti che il tuo codice funzioni con uno o entrambi gli elenchi circolari e gli elenchi non corretti? – GoZoner