我正在Windows 10上运行Emacs 24.5.1并通过SICP进行工作。 MIT编辑器Edwin不能很好地运行,尤其是在Windows上。 Racket 似乎是一个不错的选择。我已经安装了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

当我在Google上使用“ Racket ”和“精美打印”这两个字时,会出现很多documentation,但我没有运气。 Racket文档似乎通过一些以'pretty-print'开头的变量来控制 pretty-print 。但是,在racket-中以prettyM-x开头的任何内容都不会出现。也许分数形式不是Racket认为漂亮的打印形式?

最佳答案

从浮点数1.0和2.0而不是确切的数字1和2开始迭代。

文字1被读取为精确整数,而1.0或1被读取为浮点数。

现在,函数/可以同时使用两个不精确的数字。如果输入准确的数字,它将产生一个分数(最终最终在repl中打印出来)。

那是您没有看到 pretty-print 的效果,而是实际结果。该算法仅对浮点数作为输入有效,因此您可以考虑将对exact->inexact的调用添加到函数中。

10-05 20:38
查看更多