Der natürliche Weg, um über eine Liste zu wiederholen, ist nicht der beste Weg, um dieses Problem zu lösen. Die Verwendung von append
, wie in der akzeptierten Antwort von @lancery vorgeschlagen, ist auch keine gute Idee - und wenn Sie Ihren Weg in Schema lernen, ist es am besten, wenn Sie versuchen, die Lösung selbst zu implementieren, werde ich Ihnen zeigen, was zu tun ist tun, aber zuerst ein Tipp - verwenden Sie nicht list
als Parametername, das ist eine integrierte Prozedur und Sie würden es überschreiben. Verwenden Sie einen anderen Namen, sagen Sie lst
.
Es ist einfacher, eine Liste mit Hilfe eines Helfer Prozedur zu umkehren, die das Ergebnis von consing am Kopf jedes Element ansammelt des Ergebnisses, wird dies die Wirkung der Umkehrung die Liste hat - übrigens die Helfer Verfahren Schwanz -rekursiv. Hier ist die allgemeine Idee, füllen die Lücken:
(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
natürlich im wirklichen Leben nicht reverse
von Grund auf neu implementieren würde, gibt es eine eingebaute in procedure dafür.
Erwarten Sie, dass Ihr Code mit zirkulierenden Listen und/oder unsauberen Listen funktioniert? – GoZoner