Common Lisp格式指令中出现神秘的换行符
Mysterious newline appears in Common Lisp format directive
我 运行 遇到 Common Lisp 的 format
指令的一个奇怪问题,该指令仅在 GNU CLISP 中显示,这让我怀疑它是否是实现中的错误。
考虑以下代码
(defun f (s args)
(format nil "~A~{~A~%~}" s args))
函数 f
产生一个由 s
参数组成的字符串,后跟每个参数,其中每个参数(但 不是 header) 后跟一个换行符。所以,例如,我希望
(format t "~A" (f "foo" '("arg1" "arg2")))
生产
fooarg1
arg2
它所做的,正确的。现在,考虑以下调用
(format t "~A" (f "a" ()))
(format t "~A" (f "b" ()))
(format t "~A" (f "c" '("d")))
考虑到我打印出的唯一换行符是 f
的第二个参数的后续元素,并且前两个调用为第二个 f
参数传递了一个空列表,我希望直到最后才看到换行符,即我希望打印出来
abcd
它在 SBCL 中正是这样做的。但是,在 GNU CLISP 中,我得到
ab
cd
注意 b
和 c
之间的换行符。
将代码更改为
(format t "~S" (f "a" ()))
(format t "~S" (f "b" ()))
(format t "~S" (f "c" '("d")))
显示以下结果,甚至不那么有启发性
"a""b"
"cd
"
所以 b
和 c
之间的换行符不属于任何一个字符串。为什么 CLISP 决定在这些 format
语句之间打印换行符?我怎样才能阻止它这样做?
这是 GNU CLISP 的一个特性。见 documentation of *pprint-first-newline*
.
如果您想要不同的输出,请在 format
调用期间将 *print-pretty*
或 *pprint-first-newline*
绑定到 nil。
我 运行 遇到 Common Lisp 的 format
指令的一个奇怪问题,该指令仅在 GNU CLISP 中显示,这让我怀疑它是否是实现中的错误。
考虑以下代码
(defun f (s args)
(format nil "~A~{~A~%~}" s args))
函数 f
产生一个由 s
参数组成的字符串,后跟每个参数,其中每个参数(但 不是 header) 后跟一个换行符。所以,例如,我希望
(format t "~A" (f "foo" '("arg1" "arg2")))
生产
fooarg1
arg2
它所做的,正确的。现在,考虑以下调用
(format t "~A" (f "a" ()))
(format t "~A" (f "b" ()))
(format t "~A" (f "c" '("d")))
考虑到我打印出的唯一换行符是 f
的第二个参数的后续元素,并且前两个调用为第二个 f
参数传递了一个空列表,我希望直到最后才看到换行符,即我希望打印出来
abcd
它在 SBCL 中正是这样做的。但是,在 GNU CLISP 中,我得到
ab
cd
注意 b
和 c
之间的换行符。
将代码更改为
(format t "~S" (f "a" ()))
(format t "~S" (f "b" ()))
(format t "~S" (f "c" '("d")))
显示以下结果,甚至不那么有启发性
"a""b"
"cd
"
所以 b
和 c
之间的换行符不属于任何一个字符串。为什么 CLISP 决定在这些 format
语句之间打印换行符?我怎样才能阻止它这样做?
这是 GNU CLISP 的一个特性。见 documentation of *pprint-first-newline*
.
如果您想要不同的输出,请在 format
调用期间将 *print-pretty*
或 *pprint-first-newline*
绑定到 nil。