我有这个:

(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;其他的都是左对齐的,没有这个填充。
为什么会这样?
回复:
CL-USER> (addcds)
          Artist:Dixie
 Album:Funny
 Rating:22

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

最佳答案

问题是,在force-outputreadline之后,光标不知道format位于0位置因此,绝对列表将失败如果您用~&开始格式化字符串,您将看到这是一个附加的换行符。
要解决此问题,请使用@修饰符获取相对列表:

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

关于lisp - 重复调用格式化会忽略〜t选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19486540/

10-10 13:49