emacs - 从 Racket REPL 更改输出打印样式

标签 emacs racket read-eval-print-loop sicp

我正在做来自 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)然后重命名 mlistlist .所以当你写 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/

相关文章:

scheme - 在 Scheme 中检查对象是否为 "listdiff"

emacs - eval/从文件加载时如何使emacs默认切换到*scheme*?

emacs - 启动emacs时如何自动打开文件?

unit-testing - 在 Racket 中对程序使用单元测试

while-loop - 使用 "define-syntax-rule"制作我自己的 while 循环

string - 以字符串形式获取变量的 Julia REPL 输出

python - 干净地退出 python3 函数而不离开 repl

emacs - 在宏环境中强制扩展宏

git - Ediff 作为 git difftool

emacs - 如何区分 org-babel 代码块中的方案方言?