Lisp 重复调用格式化会忽略~t选项
我有这个:Lisp 重复调用格式化会忽略~t选项,lisp,common-lisp,Lisp,Common Lisp,我有这个: (defun promptread (prompt) (format *query-io* "~10t~a:" prompt) (force-output *query-io*) (read-line *query-io*)) (defun prompt-cd () (make-cd (promptread "Artist") (promptread "Album") (promptread "Rating") (prom
(defun promptread (prompt)
(format *query-io* "~10t~a:" prompt)
(force-output *query-io*)
(read-line *query-io*))
(defun prompt-cd ()
(make-cd
(promptread "Artist")
(promptread "Album")
(promptread "Rating")
(promptread "Like [y/n]")))
它可以工作,但是格式~10t
只影响promptread
内部make cd
的第一次调用;其他的是左对齐的,没有这个填充
为什么会这样
答复:
第一个
promptread
缩进是因为format
与~10t
的格式,而不是其他的,它们使用相同的格式
调用。问题是,在强制输出
和读取线
之后,format
不知道光标在位置0。因此,绝对制表将失败。如果以~&
开始格式字符串,您将看到这是一个额外的换行符
要解决此问题,请使用@
修饰符获取相对表格:
(format *query-io* "~10@t~a:" prompt)
问题是在强制输出
和读线
之后,格式
不知道光标是否位于位置0。因此,绝对制表将失败。如果以~&
开始格式字符串,您将看到这是一个额外的换行符
要解决此问题,请使用@
修饰符获取相对表格:
(format *query-io* "~10@t~a:" prompt)
你能给出完整的代码、结果以及你的期望吗?我们无法真正验证到底发生了什么,因为我们没有这些。@zck更新的问题看起来像Terje D.已经回答了您的问题,但最好尝试发布一些人复制您的错误所需的所有代码。我无法运行addcds
,因为您尚未为其提供代码。您现在已经有了答案,因此我们并不真正需要代码,但是为了使将来的问题更容易,让我们能够重现错误。您能给出完整的代码、结果以及您期望的结果吗?我们无法真正验证到底发生了什么,因为我们没有这些。@zck更新的问题看起来像Terje D.已经回答了您的问题,但最好尝试发布一些人复制您的错误所需的所有代码。我无法运行addcds
,因为您尚未为其提供代码。您现在已经有了答案,所以我们并不真正需要代码,但是为了使将来的问题更容易,我们可以重现错误。