2015-12-02 79 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