Scheme 在racket中将列表解压缩为两个单独的列表
我正在尝试编写一个名为unzip的函数,它获取一个列表,并计算为一个包含两个列表的列表,其中包含原始列表的交替元素 到目前为止,这就是我所拥有的:Scheme 在racket中将列表解压缩为两个单独的列表,scheme,racket,Scheme,Racket,我正在尝试编写一个名为unzip的函数,它获取一个列表,并计算为一个包含两个列表的列表,其中包含原始列表的交替元素 到目前为止,这就是我所拥有的: (define (unzip lst) (if (null? lst) '() (... 这就是它的工作原理: (解压’(1a2b3c))应计算为((123b)(abc))对不起,您所拥有的东西走错了方向。(想想如果输入为空,结果应该是什么。)与我对上一个问题的回答类似,这里有一个基本解决方案: (defin
(define (unzip lst)
(if (null? lst)
'()
(...
这就是它的工作原理:
(解压’(1a2b3c))应计算为((123b)(abc))对不起,您所拥有的东西走错了方向。(想想如果输入为空,结果应该是什么。)与我对上一个问题的回答类似,这里有一个基本解决方案:
(define (unzip l)
(if (null? l) ???
(let ([next (unzip ???)])
(list (cons ??? ???) ???))))
适当地填写
?
s。(是的,我的解决方案经过测试,可用于奇数和偶数输入。)next
不是一个函数。它是在let
中定义的变量。现在,考虑一下它在逻辑上应该做什么。(我把括号改成了方形,更符合球拍的风格。希望这能让事情变得更加明显。)是的,下一步
确实是(解压(cdr l))
。现在,您应该考虑如何在给定旧结果的情况下组合新结果。试试这个:想想结果是什么,对于一个空输入。然后,对于单个元素输入。然后是2个元素。等等您将很快了解到每一步需要做什么。(cons(car l)?)
部分是正确的。(cdr l)
部件不可用。你能找出原因吗?(另外,提示:至少有一个子表达式将涉及下一个变量。否则,我没有必要首先定义它。)恭喜!如果您想将您的答案与我的答案进行比较,请看以下内容: