首页 > 解决方案 > 在 Racket 博士中,我如何以相反的顺序显示列表中的 2 个元素?

问题描述

我想编写一个函数,它以相反的顺序在列表中显示 2 个元素。到目前为止,这是我的代码:

(define (reverse-order list)
  (cons (rest list) (cons (first list) empty)))

由于某种原因,此代码不起作用:例如:如果我输入

 (reverse-order (cons 1 (cons 2 empty))) 

我想要的输出是

(cons 2 (cons 1 empty))

但是,相反,我得到

(cons (cons 2 empty) (cons 1 empty))

有关如何解决此代码的任何提示都将非常有帮助。

标签: listracket

解决方案


那是因为您使用的rest是列表中的 ,而'(2)不是第二个元素2;并且您不应该调用list与同名内置过程冲突的参数。试试这个:

(define (reverse-order lst)
  (cons (second lst)
        (cons (first lst)
              empty)))

或者更简单,现在你明白为什么调用参数是个坏主意了list

(define (reverse-order lst)
  (list (second lst) (first lst)))

或者只是使用内置reverse程序:)

(define reverse-order reverse)

无论如何,它按预期工作:

(reverse-order '(1 2))
=> '(2 1)

推荐阅读