Для чего нужен макрос WITH-STANDARD-IO-SYNTAX? - PullRequest
5 голосов
/ 02 октября 2010

Практический общий Lisp стр. 25 объясняет WITH-STANDARD-IO-SYNTAX следующим образом. «Это гарантирует, что определенные переменные, которые влияют на поведение PRINT, установлены в их стандартные значения».

Использование выглядит следующим образом.

(with-open-file (...)
    (with-standard-io-syntax
        (print ...

Следует ли (печатать) использовать в этом макросе? Если нет, что случилось бы?

1 Ответ

7 голосов
/ 02 октября 2010

Различные динамические переменные влияют на вывод, производимый print.with-standard-io-syntax гарантирует, что для этих переменных установлены значения по умолчанию.

Например:

(let ((list '(1 2 3 4 5 6 7 8 9 10))
      (*print-length* 5))
  (print list)
  (with-standard-io-syntax
    (print list)))

Печать:

(1 2 3 4 5 ...) 
(1 2 3 4 5 6 7 8 9 10) 

Это особенно важно, если вы печатаетевещи с намерением иметь возможность read их позже (как с prin1).

...