2016-12-18 86 views
0

下面是這口齒不清遞歸反向列表的代碼:名單反向遞歸

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

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

任何人都可以解釋我如何利弊細胞和可變最終作品之間的分配?它是否指向該缺陷單元的頭部(汽車)?

回答

1

決賽在開始時是零,你只是每次都將一個列表的第一個元素放在它上面。 例如你有一個列表說'(a b c),並且第一次運行會使最終成爲'(a),遞歸調用將是(rev1'(b c)'(a))。

然後它是這樣的: (REV1 '(C)'(BA))

這樣下去,並在列表爲零,最終的變量是「(CBA),這是你想要的。