我在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的这个设置?
答案 0 :(得分:9)
背景:与SICP样式Scheme不同,Racket list
是不可变的。要获得可变列表,请在Racket中使用mlist
。 #lang planet/neil/SICP
做了什么(我猜对了)(require mpair)
,然后将mlist
重命名为list
。因此,当您在list
中撰写#lang
时,您实际上正在使用mlist
。
无论如何,默认情况下,mlist
的打印方式不同。但是你可以改变两个参数。
(print-as-expression #f)
现在它将打印为
{1 2 3 4}
花括号而不是括号表示它是一个可变列表。要调整 ,请设置另一个参数:
(print-mpair-curly-braces #f)
现在它应该打印为:
(1 2 3 4)
要让普通的Racket REPL始终执行此操作,我认为您可以将这两个表达式放在Racket init file中,例如OSX和Linux上的~/.racketrc
。虽然我不确定Geiser提供的REPL是否读取了init文件,但是如果你将这些表达式保留为Geiser REPL会话,那么你可以将它们放在某个.rkt
文件中并访问它一次。