如何合并两个长度相等的列表,创建一个交织元素列表?
例如,列表2, 4, 6
和1, 3, 5
应该在球拍中生成2, 1, 4, 3, 6, 5
。
我很难搞清楚这一点。
答案 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?
子句。这允许list1
或list2
具有不同的大小;留下的任何内容都会附加到最后。
答案 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