nstring-upcase nstring-downcase nstring-capitalize
(nstring-upcase string &key start end) -- (nstring-downcase string &key start end) -- (nstring-capitalize string &key start end)
string-upcase、string-downcase、string-capitalize の破壊的な綴りです。変換後の文字を引数へ書き戻し、その文字列を返します。変換規則は非破壊版と同一なので、戻り値はどのバックエンドでも同じです。
書き込みが実際に行われるのは、実行中のプログラムが割り当てた文字列の場合です。make-string や (make-array n :element-type 'character) が作るものに加え、copy-seq/subseq の切り出し、concatenate 'string / string-upcase ファミリ / format nil / with-output-to-string / read-line の結果も同様です。同一オブジェクトが返り、呼び出し側が保持している参照からも変更が見えます。
文字列リテラルの場合 -- そしてコンパイル系バックエンドでまだ不変値を返す少数のプロデューサ (たとえば princ-to-string) の結果の場合 -- 変換は書き込みではなく再構築された文字列に載ります。これはそれらの文字列への添字書き込み((setf (aref s i) c)、replace、fill)が共通して持つ差異です。移植性のあるコードは戻り値を使ってください。戻り値は引数が何であっても 4 バックエンドすべてで正しい値です:
:start / :end は非破壊版と同じく変換する範囲を指定します。範囲外の文字はそのまま残り、:end が nil なら文字列の末尾までです。不正な境界 (nil の :start を含む) は非破壊版と同じ type-error です。
いずれも第一級の関数値なので、#'nstring-upcase を funcall・mapcar・intern に渡せます。
バックエンド対応
4 バックエンドすべて。rontolisp ソースによる 1 つの定義で、参照されたプログラムにのみ差し込まれます。