Variable *PRINT-CASE*
シンボル:upcase
, :downcase
, :capitalize
のうちのひとつ。
シンボルの:upcase
。
*print-case*
の値は、 垂直バー構文を使用していないもののシンボルの名前に対して、 各文字を大文字に印刷するかどうかという 文字の種別(大文字、小文字、あるいは混合)を制御します。
*print-case*
は *print-escape*
の値がfalseのときは いつでも効果があります。 *print-case*
は、また *print-escape*
の値がfalseのときでも、 内部にエスケープ構文 (例えば、垂直バー間かスラッシュのあとではないとき) がない限り効果があります。
defun test-print-case ()
(dolist (*print-case* '(:upcase :downcase :capitalize))
(format t "~&~S ~S~%" 'this-and-that '|And-something-elSE|)))
(=> TEST-PC
;; エスケープが指定された文字は*PRINT-CASE*によって扱われますが、
;; それらの文字(例えば、単体のエスケープか複数のエスケープかによらず)が
;; どのように扱われるかは処理系依存です。
;; 下記に示す2つの例は、エスケープを表す方法としては正当です。
;実装A
(test-print-case)
>> THIS-AND-THAT |And-something-elSE|
>> this-and-that a\n\d-\s\o\m\e\t\h\i\n\g-\e\lse
>> This-And-That A\n\d-\s\o\m\e\t\h\i\n\g-\e\lse=> NIL
;実装B
(test-print-case)
>> THIS-AND-THAT |And-something-elSE|
>> this-and-that a|nd-something-el|se
>> This-And-That A|nd-something-el|se=> NIL
なし。
read
は通常は シンボルに現れる小文字を対応する大文字に変換しますが、 内部では通常は大文字の文字のみ含むような名前で印刷します。
もし*print-escape*
がtrueのとき、 シンボルの名前にある小文字は、 常に小文字として印刷され、 その文字に先行して単体のエスケープ文字が配置されるか、 あるいは複数のエスケープ文字によって囲まれます。 一方、シンボルの名前にある大文字は、 大文字か、小文字か、 単語として大文字で書かれたような混合した場合は、 *print-case*
の値に従って印刷されます。 「単語」がどのように構成されて変換するかは、 string-capitalize
と同じです。