2016-10-24 88 views
0

我剛開始學習計劃,我發現cons-cdr部分有點難以理解。我正在製作一個函數,它接受一個列表,然後顯示列表中的所有原子,包括在子列表中,就好像它是一個大列表。它看起來像這樣: (弄平「(1(2 3)4 5(6 7)))Scheme程序將子列表處理成一個列表

(1 2 3 4 5 6 7)

這是我的代碼:

(define (flatten list1) 
    (if (not (empty? list1)) 
    (if (atom? (car list1)) 
    (cons (car list1)(flatten (cdr list1))) 
    (begin 
    (flatten (car list1)) 
    (flatten (cdr list1)))) 
    '())) 

但是,當這樣做時,它將刪除子列表。所以(flatten'((1 2)3 4)會給(3 4),而不是(1 2 3 4)。

任何幫助?問題可能出現在「(開始」部分,但我可以' W圖出來..

感謝

+0

這是一個家庭作業,還是你只是想自己理解?我的提示(如果這是家庭作業)是,你提供的整個列表正在得到處理,但你永遠不會在你的「開始」部分結合這兩個函數的輸出。這意味着只有'(flatten(cdr list1))'實際上被返回。 –

+0

另外,你是否需要能夠隨意深入列表,或深度爲1足夠?我是指'((1 2)3((4 5)6))'過程到'(1 2 3(4 5)6)'還是'(1 2 3 4 5 6)'? –

回答

0

嘗試這樣的事情在你的begin

(append (flatten (car aList)) (flatten (cdr aList))) 

而且它幾乎是後同樣的問題,如果不相同: flatten list