CLISP - Umkehren einer einfachen Liste

Ich muss die Elemente einer einfachen (eindimensionalen) Liste umkehren. Ich weiß, dass es eine eingebaute Umkehrfunktion gibt, aber ich kann sie dafür nicht verwenden.

Hier ist mein Versuch:

<code>(defun LISTREVERSE (LISTR)
    (cond
        ((< (length LISTR) 2) LISTR) ; listr is 1 atom or smaller
        (t (cons (LISTREVERSE (cdr LISTR)) (car LISTR))) ; move first to the end
    )
)
</code>

Ausgabe ziemlich nahe, ist aber falsch.

<code>[88]> (LISTREVERSE '(0 1 2 3)) 
((((3) . 2) . 1) . 0)
</code>

Also habe ich versucht zu verwendenappend anstattcons:

<code>(t (append (LISTREVERSE (cdr LISTR)) (car LISTR)))
</code>

Habe aber diesen Fehler:

<code>*** - APPEND: A proper list must not end with 2
</code>

Irgendeine Hilfe?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage