该实用Common Lisp的第25页,如下解释了WITH-STANDARD-IO-SYNTAX."它确保将影响PRINT行为的某些变量设置为其标准值".
用法如下.
(with-open-file (...)
(with-standard-io-syntax
(print ...
Run Code Online (Sandbox Code Playgroud)
应该(打印)在这个宏中使用吗?如果没有,会发生什么?
各种动态变量会影响产生的输出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),这一点尤为重要.