格式化长字符串的奇怪行为

问题描述

某些事情必须解释这一点,但是对我来说,这目前没有任何意义:)

如果您具有以下三个变量:

(setf l '((( "NAME" "HASH-TABLE" )) ("&BODY") ("BODY")))
(setf fs "WITH-HASH-TABLE-IteraTOR")
(setf doc "V0lUSC1IQVNILVRBQkxFLUlURVJBVE9SICgobmFtZSBoYXNoLXRhYmxlKSAmYm9keSBib2R5KQoKUHJvdmlkZXMgYSBtZXRob2Qgb2YgbWFudWFsbHkgbG9vcgluZyBvdmVyIHRoZSBlbGVtZW50cyBvZiBhIGhhc2gtdGFibGUuIE5BTUUKaXMgYm91bmQgdG8gYSBnZW5lcmF0b3ItbWFjcm8gdGhhdCwgd2l0agluIHRoZSBzY29wZSBvZiB0aGUgaW52b2NhdGlvbiwKcmV0dXJucyBvbmUgb3IgdGhyZWUgdmFsdWVzLiBUaGUgZmlyc3QgdmFsdWUgdGVsbHMgd2hldGhlciBhbnkgb2JqZWN0cyByZW1haW4KaW4gdGhlIGhhc2ggdGFibGUuIFdoZW4gdGhlIGZpcnN0IHZhbHVlIGlzIG5vbi1OSUwsIHRoZSBzZWNvbmQgYW5kIHRoaXJkCnZhbHVlcyBhcmUgdGhlIGtleSBhbmQgdGhlIHZhbHVlIG9mIHRoZSBuZXh0IG9iamVjdC4KCkNvbnNlcxvlbmNlcyBhcmUgdW5kZWZpbmVkIGlmIEhBU0gtVEFCTEUgaXMgbXV0YXRlZCBkdXJpbmcgZXhlY3V0aW9uIG9mIEJPRFksCmV4Y2VwdCBmb3IgY2hhbmdpbmcgb3IgcmVtb3ZpbmcgZWxlbWVudHMgY29ycmVzcG9uZgluZyB0byB0aGUgY3VycmVudCBrZXkuIFRoZQphcHBsaWVzIHRvIGFsbCB0aHJlYWRzLCBub3QganVzdCB0aGUgY3VycmVudCBvbmUgLS0gZXZlbiBmb3Igc3luY2hyb25pemVkCmhhc2gtdGFibGVzLiBJZiB0aGUgdGFibGUgbWF5IGJlIG11dGF0ZWQgYnkgYW5vdGhlciB0aHJlYWQgZHVyaW5nIGl0ZXJhdGlvbiwKdXNlIGVnLiBTQi1FWFQ6V0lUSC1MT0NLRUQtSEFTSC1UQUJMRSB0byBwcm90ZWN0IHRoZSBXSVRILUhBU0gtVEFCTEUtSVRFUkFUT1IKZm9yLg==")

使用以下指令对其进行格式化:

(format NIL "~a ~a ~a" fs doc l)

我得到输出

"WITH-HASH-TABLE-IteraTOR V0lUSC1IQVNILVRBQkxFLUlURVJBVE9SICgobmFtZSBoYXNoLXRhYmxlKSAmYm9keSBib2R5KQoKUHJvdmlkZXMgYSBtZXRob2Qgb2YgbWFudWFsbHkgbG9vcgluZyBvdmVyIHRoZSBlbGVtZW50cyBvZiBhIGhhc2gtdGFibGUuIE5BTUUKaXMgYm91bmQgdG8gYSBnZW5lcmF0b3ItbWFjcm8gdGhhdCwgd2l0agluIHRoZSBzY29wZSBvZiB0aGUgaW52b2NhdGlvbiwKcmV0dXJucyBvbmUgb3IgdGhyZWUgdmFsdWVzLiBUaGUgZmlyc3QgdmFsdWUgdGVsbHMgd2hldGhlciBhbnkgb2JqZWN0cyByZW1haW4KaW4gdGhlIGhhc2ggdGFibGUuIFdoZW4gdGhlIGZpcnN0IHZhbHVlIGlzIG5vbi1OSUwsIHRoZSBzZWNvbmQgYW5kIHRoaXJkCnZhbHVlcyBhcmUgdGhlIGtleSBhbmQgdGhlIHZhbHVlIG9mIHRoZSBuZXh0IG9iamVjdC4KCkNvbnNlcxvlbmNlcyBhcmUgdW5kZWZpbmVkIGlmIEhBU0gtVEFCTEUgaXMgbXV0YXRlZCBkdXJpbmcgZXhlY3V0aW9uIG9mIEJPRFksCmV4Y2VwdCBmb3IgY2hhbmdpbmcgb3IgcmVtb3ZpbmcgZWxlbWVudHMgY29ycmVzcG9uZgluZyB0byB0aGUgY3VycmVudCBrZXkuIFRoZQphcHBsaWVzIHRvIGFsbCB0aHJlYWRzLCBub3QganVzdCB0aGUgY3VycmVudCBvbmUgLS0gZXZlbiBmb3Igc3luY2hyb25pemVkCmhhc2gtdGFibGVzLiBJZiB0aGUgdGFibGUgbWF5IGJlIG11dGF0ZWQgYnkgYW5vdGhlciB0aHJlYWQgZHVyaW5nIGl0ZXJhdGlvbiwKdXNlIGVnLiBTQi1FWFQ6V0lUSC1MT0NLRUQtSEFTSC1UQUJM (((NAME
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         HASH-TABLE))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (&BODY)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (BODY))"

请注意,换行符位于打印列表的末尾。我希望一条直线没有任何换行符。这一定是来自SBCL,并且不是长字符串的命令行行为,因为(format NIL ...)在字符串中给了我类似的输出。该行为在SBCL> 2.0中也是新的。

是否缺少某些控制变量,例如*print-level*

对长输出很抱歉,但仅在长输出时才会发生。

解决方法

这是由于设置了*PRINT-PRETTY*。这会导致打印机换行并尝试将列表元素对齐。

修复

(setq *print-pretty* nil)