我正在做来自 SICP 的问题,使用 #lang planet/neil
Racket 中的指令。我更喜欢在 Emacs 中编写我的代码,并且我正在使用 Geiser 模式通过 Emacs 运行 Racket REPL。
Racket 打印结果的方式往往会用到很多 mcons
这使得结果难以阅读。
racket@chap2.4.rkt> (list 1 2 3 4)
(mcons 1 (mcons 2 (mcons 3 (mcons 4 '()))))
根据 this other question ,可以通过在“选择语言”对话框中选择“写入”输出样式来更改 DrRacket 中的输出样式。然而这需要 DrRacket GUI;有没有办法为 Racket REPL 更改此设置?
最佳答案
背景:不同于SICP风格的Scheme,Racket list
s 是不可变的。要获得可变列表,在 Racket 中使用 mlist
.什么 #lang planet/neil/SICP
确实(我猜)是 (require mpair)
然后重命名 mlist
至 list
.所以当你写 list
在那#lang
,您实际上是在使用 mlist
.
不管怎样,mlist
s 打印方式不同,默认情况下。但是您可以更改两个参数。
print-as-expression
(print-as-expression #f)
现在它将打印为
{1 2 3 4}
花括号而不是圆括号表示它是一个可变列表。要调整它,请设置另一个参数:
print-mpair-curly-braces
(print-mpair-curly-braces #f)
现在它应该打印为:
(1 2 3 4)
为了让普通的 Racket REPL 总是这样做,我想你可以把这两个表达式放在你的 Racket init file 中。 ,例如
~/.racketrc
在 OSX 和 Linux 上。虽然我不确定 Geiser 提供的 REPL 是否读取了 init 文件,但如果您在这些表达式应该在 Geiser REPL session 中持续存在时对其进行评估,那么您可以将它们放在一些 .rkt
中。文件并访问一次。
关于emacs - 从 Racket REPL 更改输出打印样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25775600/