Emacs:在球拍模式下关闭漂亮的打印

时间:2016-12-04 23:40:35

标签: emacs racket pretty-print

我在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-内的prettyM-x开头没有任何内容。也许分数形式不是Racket认为非常印刷的?

3 个答案:

答案 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