2012-10-03 72 views
0

我正在尝试编写一个名为unzip的函数,它需要一个列表并计算列表中包含原始列表的交替元素的两个列表。将解压列表分解为两个单独的列表

到目前为止,这是我所:

(define (unzip lst) 
    (if (null? lst) 
     '() 
     (... 

这是应该如何工作的:

(解压“(1 A 2 B 3 C))应计算为((1 2 3 )(abc))

回答

1

你有什么是错误的轨道,对不起。 (想想结果应该是什么,如果给出空的输入)类似我的回答你最后一个问题,这里有一个骨架的解决方案:

(define (unzip l) 
    (if (null? l) ??? 
     (let ([next (unzip ???)]) 
     (list (cons ??? ???) ???)))) 

填写的???小号适当。 (是的,我的解决方案已经过测试,适用于奇数和偶数输入。)

+0

'next'不是函数。它是'let'中定义的一个变量。现在,想想它应该在逻辑上做什么。 (我已经将括号改为正方形,更符合球拍的风格,希望这会让事情更加明显。) –

+0

是的,'next'确实是'(unzip(cdr l))'。现在,您应该考虑如何根据旧结果来组装新结果。试试这个:想一想空的输入是什么结果。然后,对于单元素输入。然后是2个元素。等等。你会很快知道你在每一步需要做什么。 –

+0

'(cons(车l)???)部分是正确的。 '(cdr l)'部分不是。你能弄清楚为什么不呢? (另外,提示:至少有一个子表达式会涉及'next'变量,否则,首先定义它就没有意义了。) –