我在Windows 10上运行Emacs 24.5.1并正在使用SICP。麻省理工学院的编辑Edwin功能不佳,特别是在Windows上。球拍似乎是一个很好的选择。我已经安装了Racket和racket-mode,一切似乎都运行正常。但是,racket-mode
坚持打印漂亮的结果。如何让它以十进制形式打印?
例如,
(require sicp)
(define (square x) (* x x))
(define (average x y)
(/ (+ x y) 2))
(define (improve guess x)
(average guess (/ x guess)))
(define (good-enough? guess x)
(< (abs (- (square guess) x)) 0.001))
(define (sqrt-iter guess x)
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
这会产生诸如
之类的结果> (sqrt-iter 1 2)
577/408
当谷歌使用术语“球拍”和“漂亮的印刷品”时,很多documentation出现了,但我没有运气理解它。 Racket文档似乎通过一些以'pretty-print'开头的变量来控制漂亮打印。然而,racket-
内的pretty
或M-x
开头没有任何内容。也许分数形式不是Racket认为非常印刷的?
答案 0 :(得分:3)
使用浮点数1.0和2.0开始迭代,而不是精确的数字1和2.
将文字1作为精确整数读取,而将1.0或1作为浮点数读取。
现在,函数/对两个完全不精确的数字起作用。如果输入确切的数字,它会产生一个分数(最终会在repl中打印出来)。
那是你没有看到漂亮的打印机的效果,但实际结果。该算法仅对浮点数作为输入有效工作,因此您可以考虑向函数添加对exact->inexact
的调用。
答案 1 :(得分:1)
这实际上是故意的,是Scheme标准(R5RS,R7RS)的一部分。它不仅限于Racket,而应该是任何Scheme解释器/ REPL的输出。它与漂亮的打印无关。它主要被认为是一件好事,因为它给出了确切的数字(有理数)而不是浮点近似。如果你确实想要浮点结果,那么请使用1.0而不是1等来请求它。
> (/ 1.0 3)
0.3333333333333333
或者,您可以使用exact->inexact
功能,例如
> (exact->inexact 1/3)
0.3333333333333333
答案 2 :(得分:1)
正如其他答案所解释的那样,事实证明这并不是关于漂亮的印刷。
然而,从字面上回答你的问题(如果你曾经 想要在球拍模式下禁用漂亮的打印):
Emacs变量为racket-pretty-print
。
您可以使用 C-h v 查看有关它的文档。
要更改它,您可以:
使用Emacs的 M-x自定义用户界面。
在您的Emacs初始文件中使用(setq racket-pretty-print nil)
,例如racket-repl-mode-hook
。