list - 在 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))
有关如何解决此代码的任何提示都将非常有帮助。
解决方案
那是因为您使用的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)
推荐阅读
- google-app-engine - 无法从 Vagrant 访问 Google Cloud SDK for Python 的本地开发服务器
- python - 用 Python 解析两个文件
- django - Django 管理员使用具有多对多字段的 TabularInline 速度很慢
- ios - 应用内购买 - 收据验证 - 过期日期错误
- reactjs - Laravel 5 如何在 Route::get 中指定标准刀片文件
- sql-server-2008 - 根据另一个作业的输出安排作业
- multithreading - 强制按钮在功能完成之前启用更改
- node.js - 使用 socket.io 发出事件的正确方法是什么?
- python - 在这种情况下排序值不排序?
- python - 如何使用 Pandas 通过索引获取两个 csv 之间的差异