Изменить печать номеров в DrRacket REPL - PullRequest
1 голос
/ 21 января 2020

В DrRacket с #lang racket я могу вводить числа в двоичном формате следующим образом:

> #b10.1
2.5

, и я могу печатать числа в двоичном формате следующим образом:

> (printf (~r 2.5 #:base 2))
10.1

Как можно ли в REPL автоматически печатать числа в двоичном виде, например:

> #b10.1
#b10.1

или, может быть, так:

> #b10.1
10.1

?

Обратите внимание, что я не просто пытаясь распечатать десятичные числа с добавленной "#b". Например, когда я строю числа, #b10.1 должен вести себя как 2.5.

Если для этой цели не задан параметр конфигурации, то, возможно, потребуется заменить P в REPL, т. Е. Заменить печатная часть read-eval-print-l oop.

1 Ответ

3 голосов
/ 21 января 2020

Вы можете получить доступ и изменить принтер REPL с помощью current-print. Например, вы можете распечатать все числа в двоичном виде и распечатать другие значения со стандартным значением (current-print). (Обязательно запишите значение current-print, прежде чем изменить параметр.

#lang racket

(define base-print (current-print))
(define (new-print val)
  (if (number? val)
      (display (~r val #:base 2))
      (base-print val)))
(current-print new-print)

Теперь, когда вы находитесь в номере ответа, значения всегда печатаются в базе 2. Обратите внимание, что входные значения не затрагиваются, для что проверить current-prompt-read

> "hello"
"hello"
> #b10.1
10.1
> 2.5
10.1
...