交织两个列表

时间:2013-05-07 20:00:49

标签: scheme racket

如何合并两个长度相等的列表,创建一个交织元素列表?

例如,列表2, 4, 61, 3, 5应该在球拍中生成2, 1, 4, 3, 6, 5

我很难搞清楚这一点。

2 个答案:

答案 0 :(得分: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 :(得分: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的回答那样处理长度上的差异。

重新实现函数是在小型实践编程的好方法。学习库将提高生产力和清洁代码。 IMHO