2013-05-07 68 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的答案那样处理长度差异。

重新实现函数是练习小规模编程的好方法。学习图书馆将会提高生产力和更简洁的代码。恕我直言