Common Lisp的第9.10章:对符号计算的温和介绍声明:
原始i / o函数TERPRI,PRIN1,PRINC和PRINT是在Lisp 1.5(所有现代Lisp系统的祖先)中定义的,现在仍然可以在Common Lisp中找到。它们作为历史记录包含在“高级主题”部分中;你可以用FORMAT获得同样的效果。
这意味着你没有princ
&合。此外,在现代代码中,您只需要依赖format
。
这样做有什么不利之处吗?分别是format
与其他人合作无法实现的任何事情吗?
答案 0 :(得分:5)
您还可以使用更现代的write
。我不是format
的忠实粉丝,因为它简洁的子语言通常被解释。请注意,良好的实现可能能够将格式指令编译为更高效的代码。我使用FORMAT主要是因为它使复杂的代码更短,但不能输出普通的对象或像单回车那样......
Common Lisp包含三代或更多代文本I / O API:
此外,还有基于CLOS的半标准IO实现,如Gray Streams。
每个人都有其目的,很快就会消失......
CL-USER 54 > (let ((label "Social security number")
(colon ": ")
(social-security-number '|7537 DD 459234957324 DE|))
(terpri)
(princ label)
(princ colon)
(princ social-security-number)
(write-char #\newline)
(write-string label)
(write-string colon)
(write social-security-number :escape nil)
(format t "~%~A~A~A" label colon social-security-number)
)
Social security number: 7537 DD 459234957324 DE
Social security number: 7537 DD 459234957324 DE
Social security number: 7537 DD 459234957324 DE
答案 1 :(得分:4)
这些函数完全对应于以下FORMAT
运算符:
TERPRI
= ~%
FRESH-LINT
= ~&
PRIN1
= ~S
PRINC
= ~A
PRINT
= ~%~S<space>