Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Emacs: Turn off pretty printing in racket-mode

I am running Emacs 24.5.1 on Windows 10 and working through the SICP. The MIT editor Edwin doesn't function well, especially on Windows. Racket appears to be a good alternative. I have installed both Racket and racket-mode and everything seems to run okay. However, racket-mode insists on pretty-printing my results. How do I get it to print in decimal form?

For example,

(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)))

This produces results such as

> (sqrt-iter 1 2)
577/408

Lots of documentation comes up when I Google the terms "Racket" and "pretty-print," but I'm having no luck making sense of it. The Racket documentation seems to control pretty-printing via some variable beginning with 'pretty-print'. Yet nothing starting with racket- or pretty within M-x comes up. Maybe the fraction form isn't what Racket considers pretty-printing?

like image 425
Lorem Ipsum Avatar asked Dec 04 '16 23:12

Lorem Ipsum


1 Answers

Start the the iteration with floating point numbers 1.0 and 2.0 rather than exact numbers 1 and 2.

The literal 1 is read as an exact integer whereas 1.0 or 1. is read as a floating point number.

Now the function / works on both exact an inexact numbers. If fed exact numbers it produces a fraction (which eventually ends up being printed in the repl).

That is you are not seeing the effect of a pretty printer, but the actual result. The algorithm works efficiently only on floating point numbers as input so you can consider adding a call to exact->inexact to your function.

like image 173
soegaard Avatar answered Nov 01 '22 19:11

soegaard