2
也許對於大多數更先進的陰謀家的一個微不足道的問題在這裏,但作爲一個新人,我發現這是一個問題。方案列表中總是以相反的順序
我需要一種方法來構造一個新的列表即以相同的順序它是當它進來了。作爲一個例子,假設我們給出的列表「(1 2 0 3 4 0 0 5)。但是遍歷列表並將cdr作爲第一個參數傳遞回去,最終會向後構建新列表。
下面是一個代碼示例:
我通過它,需要它,一個空列表爲「新名單」所做的工作,以形成並返回一個「老名單」。
注意服用0出來就是這裏的「一定條件」,新的列表必須符合
(define (form-new-list old-list new-list)
(cond ((null? old-list) new-list)
(else
(if (eq? (car old-list) 0) (form-new-list (cdr old-list) new-list)
(form-new-list (cdr old-list) (cons (car old-list) new-list))))))
;test
(form-new-list '(1 2 0 3 4 0 0 5) '()) ; gives (5 4 3 2 1)
;but want (1 2 3 4 5)
我不只是想扭轉這種與反向過程返回的名單,但相反,希望新的列表首先按照正確的順序放在一起。
是否有某種「絕招」這個,喜歡做遞歸調用別的地方吧?
任何意見非常感謝。
感謝奧斯卡。我想我錯過了你在那裏做遞歸的地方;把汽車交給cdr的程序調用。謝謝你的建議。我現在正在學習計算機程序的結構和解釋書,但會牢記這些。這個問題特別是我真正想要確定的。通常我有一個「反向」方法來處理這個問題,但是這樣好多了。再次感謝。 – Matt
不客氣! SICP是一本_magnificent_書,我絕對推薦它,但對初學者來說可能有點困難。 –