1

我有这个:

(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只影响对promptreadinside的第一次调用make-cd;其他的都是左对齐的,没有这个填充。

为什么会这样?

回复:

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

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

4

1 回答 1

5

问题是在force-outputand之后readline,光标不知道format在位置 0。因此绝对制表将失败。如果您以 开头的格式字符串~&,您将看到这是因为无论如何都会输出一个额外的换行符。

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

(format *query-io* "~10@t~a:" prompt)
于 2013-10-21T06:09:38.480 回答