从Racket REPL更改输出打印样式

时间:2014-09-10 21:44:31

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

我在SICP中使用Racket中的#lang planet/neil指令来解决问题。我更喜欢在Emacs中编写代码,而我正在使用Geiser模式通过Emacs运行Racket REPL。

球拍打印结果的方式往往使用大量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的这个设置?

1 个答案:

答案 0 :(得分:9)

背景:与SICP样式Scheme不同,Racket list是不可变的。要获得可变列表,请在Racket中使用mlist#lang planet/neil/SICP做了什么(我猜对了)(require mpair),然后将mlist重命名为list。因此,当您在list中撰写#lang时,您实际上正在使用mlist

无论如何,默认情况下,mlist的打印方式不同。但是你可以改变两个参数。

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中,例如OSX和Linux上的~/.racketrc。虽然我不确定Geiser提供的REPL是否读取了init文件,但是如果你将这些表达式保留为Geiser REPL会话,那么你可以将它们放在某个.rkt文件中并访问它一次。