【发布时间】:2013-06-23 01:37:36
【问题描述】:
我知道以前有人问过这个问题,我的解决方案与许多答案相同,但我有一个特殊的测试用例,它不能与这个问题的通用解决方案一起正常工作。
我为 zip 问题找到的解决方案像许多其他人一样是
(define (zip l1 l2)(map list l1 l2))
。 . .which 适用于给定的参数,例如
(zip '(a b c) '(1 2 3)) => ((a 1) (b 2) (c 3))
但我也希望 zip 函数适用于我的参数与长度不匹配的情况,例如
(zip '(a b c) '(1)) => ((a 1) (b ()) (c ()))
我还没有找到解决这个问题的方法,也不确定如何解决每个列表可以是任意长度的问题。
【问题讨论】:
-
你想做什么还不清楚。您想要的结果没有正确输入:第一个列表由一个符号和一个整数组成,后两个列表由一个符号和一个列表组成。这是可能的,但不太可能。 (zip '(a b c) '(1)) 的更好表述将返回 ((a 1)) 并丢弃多余的项目,或者返回 ((a 1) (b) (c))。当 zip 函数有三个或更多列表时,你会怎么做?请明确说明您想做什么。
-
我想在两个列表之间进行映射,如果列表是偶数,那么每个项目都映射到另一个列表中项目的相同索引,例如 (zip '(a b c) '(1 2 3)) => ((a 1) (b 2) (c 3))。我想要但不能产生的附加结果是在作为参数给出的两个列表长度不同的情况下,所以我想要的结果是 (zip '(a b c) '(1)) => (( a 1) (b ()) (c ())) 如果在第二个列表中没有第一个列表要映射到的项目,它只会与一个空列表配对,但与当前函数定义将不起作用.