Common Lisp的格式函数中\ r的等价物?
基本上,我想要做以下事情,只使用Common Lisp而不是Python:
print("Hello world.\r\n")
我可以这样做,但它只输出#\newline
并跳过#\return
:
(format t "Hello world.~%")
我相信我可以用外部的论据来完成这个工作,例如:
(format t "Hello world.~C~%" #\return)
但对我来说似乎很尴尬。 当然,我可以以某种方式embedded#\return
到格式string,就像我可以#\newline
?
返回和换行的字符
\r
是Common Lisp中的字符#\return
。
\n
是Common Lisp中的字符#\linefeed
。
以下结束string"Hello world."
与回归和换行。
(format t "Hello world.~C~C" #\return #\linefeed)
#\newline
是任何平台用作线路分工。 在Unix机器上,这通常与#\linefeed
相同。 在其他平台上(Windows,Lisp Machines,…),这可能是不同的。
格式控制
FORMAT
控件~%
打印换行符(!)。
所以
(format t "Hello world.~%")
将打印操作系统使用的换行符。 CR或CRLF或LF。 根据平台,这将是一个或两个字符。
所以,在Windows机器上你的
(format t "Hello world.~C~%" #\return)
实际上可能会打印: #\return
#\return
#\linefeed
。 这是三个字符,而不是两个。 Windows使用CRLF换行符。 Unix使用LF。 旧的Mac OS(在Mac OS X之前)和Lisp Machines使用CR来换行。
写CRLF
如果你真的想打印CRLF,你必须明确地做到这一点。 例如:
(defun crlf (&optional (stream *standard-output*)) (write-char #\return stream) (write-char #\linefeed stream) (values))
FORMAT
没有用于换行或回车符输出的特殊语法。
在FORMAT控件中换行
Common Lisp允许多行string。 因此我们可以使用它们作为格式控件:
在这里您可以看到控制string中的换行符也在输出中:
CL-USER 77 > (format t "~%first line second line~%~%") first line second line NIL
下面是一个例子,其中~@
FORMAT控件保持换行符,但删除下一行的空格:
CL-USER 78 > (format t "~%first line~@ second line~%~%") first line second line NIL
首先,在Common Lisp中,大部分字符(包括return / newline)可以直接插入到string中。 唯一需要转义的字符是string分隔符。
还有一个库cl-interpol ,它提供了一个读macros来构造更复杂语法的string,包括特殊字符转义。