【问题标题】:unzipping list into two separate lists in racket将列表解压缩到球拍中的两个单独列表中
【发布时间】:2012-09-24 00:42:16
【问题描述】:

我正在尝试编写一个名为 unzip 的函数,它接受一个列表并计算出两个列表的列表,其中两个列表具有原始列表的交替元素。

到目前为止,这是我所拥有的:

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

它应该是这样工作的:

(unzip '(1 a 2 b 3 c)) 应该评估为 ((1 2 3) (a b c))

【问题讨论】:

    标签: scheme racket


    【解决方案1】:

    抱歉,您所拥有的东西走错了路。 (想想如果给定一个空输入,结果应该是什么。)类似于我对你上一个问题的回答,这是一个框架解决方案:

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

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

    【讨论】:

    • next 不是函数。它是在let 中定义的变量。现在,想想它应该在逻辑上做什么。 (我把括号改成了方形,更符合 Racket 的风格。希望这能让事情变得更加明显。)
    • 是的,next 确实是(unzip (cdr l))。现在,您应该考虑如何在给定旧结果的情况下组装新结果。试试这个:想想结果是什么,对于一个空的输入。然后,对于单元素输入。然后是2个元素。等等。您将很快了解每一步需要做什么。
    • (cons (car l) ???) 部分是正确的。 (cdr l) 部分不是。你能弄清楚为什么不吗? (另外,提示:至少一个子表达式将涉及 next 变量。否则,我一开始就没有定义它的意义。)
    • 恭喜!如果您想将您的答案与我的答案进行比较,请查看:gist.github.com/871a0abf0aa6a020f52b
    猜你喜欢
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多