文字列の読み取り構文は、ダブルクォート、任意の数の文字、そしてもう一つのダブルクォートで構成されます "like
this"。文字列内にダブルクォートを含めるには、その前にバックスラッシュを記述します。したがって、"\""
はダブルクォート文字を1つだけ含む文字列となります。同様に、次のようにもう一つのバックスラッシュを前に置くことで、バックスラッシュを含めることもできます。"this \\ is a single embedded backslash"。
文字列は文字の配列であるため、characters
の読み取り構文を用いて文字列の文字を指定できますが、先頭の疑問符は省略します。これは、単独では意味をなさない文字を文字列定数に含める際に便利です。したがって、制御文字はバックスラッシュで始まるエスケープシーケンスとして指定できます。例えば、"foo\r" は ‘foo’
に続きキャリッジリターン文字を出力します。その他の制御文字のエスケープシーケンスについては、基本文字構文を参照してください。同様に、制御文字用の特殊な読み取り構文(制御文字構文を参照)を使用して、"foo\^Ibar" のように文字列内にタブ文字を埋め込むこともできます。また、一般エスケープ構文で説明されている非ASCII文字用のエスケープシーケンスを、"\N{LATIN SMALL LETTER A WITH GRAVE}"
や "\u00e0"
のように使用することも可能です(ただし、非ASCII文字に関する注意点については 文字列内の非ASCII文字を参照してください)。
文字列の読み込み構文において、改行文字は特別な扱いを受けません。ダブルクォートの間に改行を記述すれば、それは文字列内の文字となります。しかし、エスケープされた改行――すなわち ‘\’ が前置されたもの――は、文字列の一部にはなりません。つまり、Lispリーダーは文字列を読み込む際、エスケープされた改行を無視します。同様に、エスケープされたスペース ‘\ ’ も無視されます。
"It is useful to include newlines
in documentation strings,
but the newline is \
ignored if escaped."
⇒ "It is useful to include newlines
in documentation strings,
but the newline is ignored if escaped."