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]")))

動作しますが、フォーマットはinside~10tへの最初の呼び出しにのみ影響します。他のものは、このパディングなしで左揃えになります。promptreadmake-cd

これはなぜでしょうか?

交換:

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

最初のものはwithpromptreadのためにインデントされていますが、まったく同じ呼び出しを使用する他のものはインデントされていません。format~10tformat

4

1 に答える 1

5

問題は、 と の後force-outputreadline、カーソルがformat位置 0 にあると認識されないことです。したがって、絶対集計は失敗します。フォーマット文字列を で開始すると~&、追加の改行がとにかく出力されるため、これが表示されます。

問題を解決するには、@修飾子を使用して相対集計を取得します。

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