Naturalny sposób powtarzania listy nie jest najlepszym sposobem rozwiązania tego problemu. Używanie append
, jak sugeruje zaakceptowana odpowiedź wskazana przez @pathium, również nie jest dobrym pomysłem - i tak, jeśli uczysz się w Scheme, najlepiej, jeśli sam spróbujesz wdrożyć rozwiązanie, pokażę ci, zrobić, ale najpierw napiwek - nie używaj list
jako nazwy parametru, to wbudowana procedura, którą nadpisałeś. Użyj innej nazwy, powiedzmy, lst
.
jest prostsze do odwrócenia listy za pomocą procedury pomocniczych, które gromadzą się w wyniku consing każdy element w głowicy wyniku, będzie to miało wpływ odwrócenia List - zresztą procedura pomocnik ogon -recursive. Oto ogólny pomysł, wypełnić puste pola:
(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
oczywiście w prawdziwym życiu nie byłoby wdrożyć reverse
od podstaw, nie ma wbudowaną procedure do tego.
Czy spodziewasz się, że twój kod będzie działał z jedną lub z obiegiem list i błędnymi listami? – GoZoner