重复调用格式忽略~t选项

时间:2013-10-21 04:58:06

标签: 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")
     (promptread "Like [y/n]")))

它有效,但格式~10t仅影响promptreadmake-cd的第一次调用;其他人在没有这种填充的情况下左对齐。

为什么会这样?

REPL:

CL-USER> (addcds)
          Artist:Dixie
 Album:Funny
 Rating:22

第一个promptread是缩进的,因为format~10t但不是其他人,它们使用相同的format调用。

1 个答案:

答案 0 :(得分:5)

问题是在force-outputreadline之后,format不知道光标位于0位置。因此绝对制表将失败。如果您使用~&启动格式字符串,您将看到此内容,无论如何都会输出另外的换行符。

要解决此问题,请使用@修饰符获取相对列表:

(format *query-io* "~10@t~a:" prompt)