2013-10-21 61 views
1

我有這樣的:格式化重複調用忽略了〜t選項

(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隻影響內部make-cdpromptread第一個電話;其他人左對齊沒有這種填充。

這是爲什麼?

REPL:

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

第一promptread是因爲format~10t而不是其他,它使用完全相同的format通話縮進。

+0

你能給完整的代碼,結果,再加上你期待什麼?我們無法真正驗證發生了什麼,因爲我們沒有這些。 – zck

+0

@zck更新問題 – johnbakers

+0

看起來Terje D.已回答您的問題,但最好嘗試發佈某人需要重現錯誤的所有代碼。我不能運行'addcds',因爲你沒有提供代碼。現在你已經有了答案,所以我們不需要代碼,但爲了使將來的問題更容易,使我們能夠重現錯誤。 – zck

回答

5

問題是,在force-outputreadline之後,format的遊標未知位於位置0.因此絕對製表將失敗。如果你用~&開始格式化字符串,你會看到這個,因爲無論如何都會輸出額外的換行符。

爲了解決這個問題,請使用@修改以獲得相對製表:

(format *query-io* "[email protected]~a:" prompt)