2015-12-02 78 views
4

因此函數:爲什麼SBCL打印這樣的Sublis?

​​

在SBCL輸出被打印的這種方式:

(IF WE 
    LEARN 
    LISP 
    WE 
    WILL 
    BE 
    PLEASED) 

然而,例如,一個:

(sublis '((roses . violets) (red . blue)) 
     '(roses are red)) 

給出輸出

(VIOLETS ARE BLUE) 

爲什麼SBCL在不同的行上打印列表的原子,與其他分佈類似Clisp不同?

+1

沒有換行* *在結果列表,它的SBCL只是如何打印它。例如,CCL和CLISP在單行上打印列表。 – uselpa

+0

O,謝謝:)我很感謝快速回答。你知道它爲什麼以這種方式打印嗎? – Floofk

+0

對不起,我沒有使用SBCL我有一個快速瀏覽文檔,我沒有找到任何會導致此問題的參數。有些更熟悉SBCL的人可能可以解釋這一點。 – uselpa

回答

9

(if …)列表正在由漂亮打印機在假設它(可能)是一個實際的Lisp表單的情況下處理。

CL-USER> (setf *print-pretty* nil) 
NIL 
CL-USER> '(if 1 2 3) 
(IF 1 2 3) 
CL-USER> (setf *print-pretty* t) 
T 
CL-USER> '(if 1 2 3) 
(IF 1 
    2 
    3) 

你會發現,除其他事項外,let形式也將同樣縮進,和某些loop符號將啓動新的生產線。還有其他一些影響。

CL-USER> '(loop for thing in stuff with boo = 4 count mice) 
(LOOP FOR THING IN STUFF 
     WITH BOO = 4 
     COUNT MICE) 
CL-USER> '(let 1 2 3) 
(LET 1 
    2 
    3) 
CL-USER> '(defun 1 nil 2 3) 
(DEFUN 1() 2 3) 
CL-USER> (setf *print-pretty* nil) 
NIL 
CL-USER> '(defun 1 nil 2 3) 
(DEFUN 1 NIL 2 3) 

BTW,相關標準被發現... ... http://www.lispworks.com/documentation/lw60/CLHS/Body/22_b.htm如果你是,比方說,要重新編程爲您的目的。

對於只是打印數據列表,我懷疑禁用漂亮的打印或使用FORMAT可能就足夠了,但。

例如,

(format t "~&[email protected](~{~a~^ ~}~)" '(violets are blue)) 
Violets are blue