2016-12-18 2 views
0

Hier ist ein Code, der eine Liste rekursiv in Lisp umkehren:Liste umkehren rekursiv

(defun rev1(list final) 
    (if (eq list()) 
    final 
     (rev1(cdr list) (cons (car list) final)))) 

(defun rev(list) 
    (rev list nil)) 

Könnte mir jemand erklären, wie die Zuordnung zwischen cons Zelle und den variablen Abschlussarbeiten? Ist es Zeiger auf den Kopf (Auto) dieser Cons-Zelle?

Antwort

1

Das Finale ist Null am Anfang und Sie konsumieren nur das erste Element einer Liste jedes Mal. z.B. Sie haben eine Liste sagen '(a b c) und der erste Lauf wird das Finale zu sein' (a) und der rekursive Aufruf wird entsprechend (rev1 '(b c)' (a)) sein.

Und dann geht es wie folgt aus: (rev1 '(c)' (ba))

dies geht weiter und wenn die Liste null ist, die letzte Variable ‚(cba), was Sie wollen .