2012-11-11 79 views
1

我的目標是從這個名單遞歸的方案

(A B C D E G)

找到一個新的列表

(B D G)

但我的代碼是行不通的。

(define (fun lst) 
    (cond 
    ((null? lst) '()) 
     ((null? (cdr lst) '()) 
     (else (cons (cadr lst) (fun lst)))) 

我得到(B C D E G)。我哪裏錯了?

+3

[A scheme procedure返回所有其他元素的列表]的可能重複(http://stackoverflow.com/questions/13318388/a-scheme-procedure-that-returns-a-list-of-every-其他元素) –

+0

另一個?看起來這個特定編程課程的一些學生已經開始在堆棧溢出中拋棄他們的作業。這個問題已經被回答了,[這裏](http://stackoverflow.com/a/13319129/201359)。 –

+0

看看那個'else'分支,你認爲你的遞歸是在那裏嗎? – jozefg

回答

2

你的功能沒有做任何事情,你真的沒有指定你想測試的東西。如果你真的只想從這個特定的列表中獲得B D G,那麼你所需要做的就是對每個角色進行每個測試,(相當於?(汽車1)'B)等等。

如果相反,該函數假設只是在列表中打印每個其他字符,那麼您需要構建一種方法來實現。例如你現在遞歸的基本情況是正確的,空列表應該返回一個空列表。否則,如果它不是空的,則返回列表的cdr,然後使用它。

如果你仍然不能找出答案,只需開始在紙上寫下來,看看不同的測試會做什麼。你需要想出找到其他角色的方法。