2013-05-07 57 views
1

如何合併兩個長度相等的列表,創建一個交織元素列表?Intertwine兩個列表

例如,列表2, 4, 61, 3, 5應在球拍中產生2, 1, 4, 3, 6, 5

我很難搞清楚這一點。

+2

你到目前爲止嘗試過什麼?發佈你的代碼!堆棧溢出是不是讓你的功課做的地方免費 – 2013-05-07 20:10:00

+0

(定義(名酒列表1列表2) (如果[(空?列表1)空] (利弊第一列表1 (名酒??? (入住希望( (2 4 6)'(1 3 5))'(2 1 4 3 6 5)) – user2359807 2013-05-07 20:33:26

+0

這不是家庭作業,只是我自己的學習計劃 – user2359807 2013-05-07 20:40:37

回答

1

這類問題的一般方法是解決第一個元素的問題,然後爲其餘的問題進行遞歸。如果你解決這個問題:

(zip '(2) '(1)) 

那麼遞歸看起來像這樣(與終止條件表示在前):

(define (zip list1 list2) 
    (cond ((null? list1) list2) 
     ((null? list2) list1) 
     (else (cons (car list1) 
        (cons (car list2) 
          (zip (cdr list1) (cdr list2))))))) 

> (zip '(a b c) '(1)) 
(a 1 b c) 
> (zip '(a b c) '(1 2 3)) 
(a 1 b 2 c 3) 
> (zip '(a) '(1 2 3)) 
(a 1 2 3) 

注意兩個null?條款。這允許list1list2是不同的大小;最後會留下什麼。

1

如果你正在尋找學習電池包括球拍方面:

#lang racket 
(define (intertwine L1 L2) 
    (flatten (map cons L1 L2))) 

快速測試。

> (intertwine '(2 4 6) '(1 3 5)) 
'(2 1 4 3 6 5) 

注意作品在同等大小的名單的情況下,每提出的問題。不會像@ GoZoner的答案那樣處理長度差異。

重新實現函數是練習小規模編程的好方法。學習圖書館將會提高生產力和更簡潔的代碼。恕我直言