【问题标题】:How to swap first two items of a list in racket?如何交换球拍中列表的前两项?
【发布时间】:2019-11-08 12:10:22
【问题描述】:

我正在尝试编写一个函数,该函数接受一个列表并返回相同的列表,其中前两个元素已交换,例如给定 '(a b c d e f) 它应该返回 '(b a c d e f),我已设法返回交换的前两个项目但是它将其余元素放在列表中'(b a(c d e f)),除了我的做法之外,还有一种简单的方法可以做到这一点。

(define swap-two (λ (l)
                   (cond
                     ((empty? l) 0)
                     ((< (length l) 2) "less than two")
                     ((>= (length l) 2) (append (list (cadr l) (car l) (cddr l))))
                     (#t l))))

【问题讨论】:

    标签: scheme racket


    【解决方案1】:

    我们可以简化解决方案,对于初学者来说,您不需要这么多情况,要么列表有 >= 2 个元素,要么没有。

    在 Racket 中,我们可以利用直观命名的 firstsecond 过程来获取列表中的第一个和第二个元素,之后的元素可以通过不那么直观的 cddr 过程来获取。

    最后一步是将cons 全部放在一起,建立一个合适的列表。您使用的是(append (list ...)),这就是最后一部分出现在列表中的原因。最好花一些时间熟悉conslistappend 的工作原理。这就是我的意思:

    (define swap-two
      (λ (lst)
        (if (< (length lst) 2)
            "less than two"
            (cons (second lst)
                  (cons (first lst)
                        (cddr lst))))))
    

    它按预期工作:

    (swap-two '(a b c d e f))
    => '(b a c d e f)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-29
      • 2012-09-24
      • 2018-03-04
      相关资源
      最近更新 更多