2017-08-21 119 views
4

我注意到沒有 format指令,將 呼叫force-output/finish-output呼叫結束輸出從格式

爲什麼?

它似乎是在用戶交互是有用的,比照 Lisp format and force-output

例如,~=可以翻譯成finish-output~:=force-output。 我不認爲clear-output在這方面很有意義,但我們 可能會映射[email protected]=以完整性。

PS。參看CLISP RFE。從comp.lang.lisp

+0

清除輸入也許可以是具有雙向流有用嗎? – coredump

回答

2

摘要:

從史蒂芬Haflich

語言的解釋定義沒有可移植的方法來擴展格式的設定 指令(其他然後~/.../),但在這裏,這不是真正的問題。 真正的問題是,在打印過程中沒有明確定義在任意位置調用finish-output或類似的功能。

如果漂亮的印刷過程中,由 pprint-dispatchprint-object方法收到的流可以是封裝流 - 一個暫時延遲輸出,直到它可以使約 空格和換行決定。 (也有潛在的問題,如果 finish-output被稱爲~<理由裏面,但該指令 是毛球!)什麼將一個預期finish-output做,如果叫 一個漂亮的打印操作裏面?我不認爲它有明確的定義。

的問題是並非特定格式,當然,但是從格式 finish-output一個指令只想補充另一個尖銳的邊緣到 語言。 finish-output等僅在完全 以外的實際或暗示呼叫cl:write時纔可以安全呼叫。把它作爲一個功能 在代碼中的適當位置(你知道執行力不 嵌套寫裏面),這樣的意圖是明確的,你不要弄亂 打印機內部。

事實上,需要從羅布沃諾克有人建議format沒有變化。只是在某處COMMON-LISP-USER package添加此功能:

(defun fo (stream arg colon-p atsign-p &rest params) 
    (declare (ignore arg params)) 
    (cond 
    (colon-p (force-output stream)) 
    (atsign-p (clear-output stream)) 
    (t (finish-output stream)))) 

然後:

(progn 
    (format t "enter var: ~/fo/" nil) 
    (read)) 
enter var: 456 
456 

的問題與此(便攜式!)的方式被

  • 冗長的(~/fo/代替~=
  • 需要消耗格式參數(nil在上面的例子)