我的方案有點生疏。我剛纔在手DR-方案翻譯...
需要消耗你的清單,只返回每個子列表的第一個元素。要創建一個列表,您必須使用cons指令,並且不需要輸出它,您需要將其作爲函數結果返回(但您應該已經知道它)。
如果您需要打印的結果,你應該計算與輸出分離,在第二個步驟解決打印問題。
對於建立一個列表,你有幾個結構,最基本的就是缺點,它需要一個通用的元素(同樣是一個列表),並在前面加上一個列表(空一個,也可以)
(cons 1) => error: cons need two parameters
(cons 1 null) => (list 1)
(cons 1 2) => error: need a value (first parameter) and a list (the second one)
(cons 1 (cons 2 null) => (list 1 2)
現在到你的作業。通常我不張貼功課代碼,但這一次我覺得你只是一個暗示離解,所以有可能一個
(define (car-list alist)
(cond
((null? alist) null)
(else (cons (car(car alist)) (car-list (cdr alist))))
)
)
; tail recursion version usage: (car-acc-list alist null)
(define (car-acc-list alist acc)
(cond
((null? alist) acc)
(else (car-acc-list (cdr alist) (cons (car(car alist)) acc)))
)
)
我以前COND,而不是如果「原因我認爲它允許更好的代碼格式。 他的結構很簡單:條件列表,測試條件(或其他)作爲汽車和行動執行,如果條件滿足cdr。 如果行動決心的值((空?ALIST)空)函數的返回與該值作爲返回值。如果遞歸被觸發,那麼函數在遞歸完成時返回。
有兩個版本的解決方案,你應該使用步進/調試器來研究他們之間的分歧。
順便說一下,我用drscheme來測試代碼,它是一個非常棒的免費(lgpl)軟件。與其他計劃環境稍有不同之處在於代碼應該是非常基本的代碼,因此它應該在任何地方都沒有問題。
@Richard,方案。 – 2010-03-30 01:21:14
它應該是方案,一個lisp方言(與靜態範圍) – Eineki 2010-03-30 01:22:24
@poorStudent有你一個輸入的例子嗎?你使用什麼方案級別? – Eineki 2010-03-30 01:23:42