基本的に、Pythonの代わりにCommon LISPのみを使用して、以下を実行します。
print("Hello world.\r\n")
これは可能ですが、#\newline
文字のみを出力し、#\return
をスキップします。
(format t "Hello world.~%")
私は次のような外部の議論を使用してこれを達成できると信じています:
(format t "Hello world.~C~%" #\return)
しかし、私には不便に思われます。確かに、#\return
を#\newline
のように、まさにその形式の文字列に埋め込むことができます。
改行と改行の文字
\r
はCommon LISPの文字#\return
です。
\n
はCommon LISPの文字#\linefeed
です。
以下は、文字列"Hello world."
を改行と改行で終了します。
(format t "Hello world.~C~C" #\return #\linefeed)
#\newline
は、プラットフォームがライン分割として使用するものです。 Unixマシンでは、これはしばしば#\linefeed
と同じです。他のプラットフォーム(Windows、LISPマシンなど)では、これは異なる場合があります。
FORMATコントロール
FORMAT
コントロール~%
は改行(!)を出力します。
そう
(format t "Hello world.~%")
オペレーティングシステムが使用する改行を出力します。 CRまたはCRLFまたはLF。プラットフォームに応じて、これは1文字または2文字になります。
したがって、Windowsマシンでは
(format t "Hello world.~C~%" #\return)
実際に印刷される可能性があります:#\return
#\return
#\linefeed
。 2文字ではなく3文字です。 WindowsはCRLFを改行に使用します。 UnixはLFを使用します。古いMac OS(Mac OS Xより前)およびLISPマシンでは、改行にCRを使用していました。
CRLFを書き込む
本当にCRLFを印刷したい場合は、明示的に行う必要があります。たとえば:
(defun crlf (&optional (stream *standard-output*))
(write-char #\return stream)
(write-char #\linefeed stream)
(values))
FORMAT
には、改行または復帰文字の出力のための特別な構文はありません。
FORMATコントロールの改行
一般的なLISPでは、複数行の文字列を使用できます。したがって、これらをフォーマットコントロールとして使用できます。
ここでは、制御文字列の改行が出力にも含まれていることがわかります。
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では、リターン/改行を含むほとんどの文字を文字列に直接挿入できます。エスケープが必要な唯一の文字は文字列区切り文字です。
ライブラリ cl-interpol もあり、特殊文字のエスケープを含む、より複雑な構文で文字列を構築するための読み取りマクロを提供します。