什么是WITH-STANDARD-IO-SYNTAX宏?

pro*_*eek 5 lisp common-lisp

实用Common Lisp的第25页,如下解释了WITH-STANDARD-IO-SYNTAX."它确保将影响PRINT行为的某些变量设置为其标准值".

用法如下.

(with-open-file (...)
    (with-standard-io-syntax
        (print ...
Run Code Online (Sandbox Code Playgroud)

应该(打印)在这个宏中使用吗?如果没有,会发生什么?

Dan*_*son 7

各种动态变量会影响产生的输出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)))
Run Code Online (Sandbox Code Playgroud)

打印:

(1 2 3 4 5 ...) 
(1 2 3 4 5 6 7 8 9 10) 
Run Code Online (Sandbox Code Playgroud)

如果您打印的东西是为了read以后能够使用它们(比如prin1),这一点尤为重要.