2

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

例如,列出2, 4, 61, 3, 52, 1, 4, 3, 6, 5在球拍中产生。

我很难弄清楚这一点。

4

2 回答 2

1

如果您想了解Racket包含的电池方面:

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

快速测试。

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

NOTE适用于相同大小的列表,每个问题。不会像@GoZoner 的回答那样处理长度差异。

重新实现函数是练习小型编程的好方法。学习这个库将允许更高的生产力和更简洁的代码。恕我直言

于 2013-05-15T21:40:12.353 回答
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成为不同的大小;剩下的都附加到最后。

于 2013-05-07T20:22:01.673 回答