0
我正在尝试编写一个名为unzip的函数,它需要一个列表并计算列表中包含原始列表的交替元素的两个列表。将解压列表分解为两个单独的列表
到目前为止,这是我所:
(define (unzip lst)
(if (null? lst)
'()
(...
这是应该如何工作的:
(解压“(1 A 2 B 3 C))应计算为((1 2 3 )(abc))
我正在尝试编写一个名为unzip的函数,它需要一个列表并计算列表中包含原始列表的交替元素的两个列表。将解压列表分解为两个单独的列表
到目前为止,这是我所:
(define (unzip lst)
(if (null? lst)
'()
(...
这是应该如何工作的:
(解压“(1 A 2 B 3 C))应计算为((1 2 3 )(abc))
你有什么是错误的轨道,对不起。 (想想结果应该是什么,如果给出空的输入)类似我的回答你最后一个问题,这里有一个骨架的解决方案:
(define (unzip l)
(if (null? l) ???
(let ([next (unzip ???)])
(list (cons ??? ???) ???))))
填写的???
小号适当。 (是的,我的解决方案已经过测试,适用于奇数和偶数输入。)
'next'不是函数。它是'let'中定义的一个变量。现在,想想它应该在逻辑上做什么。 (我已经将括号改为正方形,更符合球拍的风格,希望这会让事情更加明显。) –
是的,'next'确实是'(unzip(cdr l))'。现在,您应该考虑如何根据旧结果来组装新结果。试试这个:想一想空的输入是什么结果。然后,对于单元素输入。然后是2个元素。等等。你会很快知道你在每一步需要做什么。 –
'(cons(车l)???)部分是正确的。 '(cdr l)'部分不是。你能弄清楚为什么不呢? (另外,提示:至少有一个子表达式会涉及'next'变量,否则,首先定义它就没有意义了。) –