Next: Predicates for Strings, Up: Strings and Characters [Contents][Index]
文字(character)とは、テキスト内の1つの文字を表すLispオブジェクトです。Emacs Lispでは文字は単なる整数です。ある整数が文字か文字でないかを区別するのは、それが使用される方法だけです。Emacsでの文字表現についての詳細はCharacter Codesを参照してください。
文字列(string)とは固定された文字シーケンスです。これは配列(array)と呼ばれるシーケンス型であり、配列長が固定で一度作成したら変更できないことを意味します(Sequences Arrays Vectorsを参照)。Cとは異なり、Emacs Lispの文字列は文字コードを判断することにより終端されません。
文字列は配列であるということは同様にシーケンスでもあるので、Sequences Arrays Vectorsにドキュメントされている一般的な配列関数やシーケンス関数で文字列を処理できます。たとえば関数aref
を使用して文字列内の特定の文字にアクセスしたり変更することができます(Array Functionsを参照)。
Emacs文字列での非ASCIIにたいすテキスト表現は2つ — ユニバイト(unibyte)とマルチバイト(multibyte)があります。ほとんどのLispプログラミングでは、これら2つの表現を気にする必要はありません。詳細はText Representationsを参照してください。
キーシーケンスがユニバイト文字列で表されることがあります。ユニバイト文字列がキーシーケンスの場合、範囲128から255までの文字列要素は範囲128から255の文字コードではなく、メタ文字(これは非常に大きな整数である)を表します。文字列はハイパー(hyper)、スーパー(super)、アルト(alt)で修飾された文字を保持できません。文字列はASCIIコントロール文字を保持できますが、それは他のコントロール文字です。文字列はASCIIコントロール文字のcaseを区別できません。そのような文字をシーケンスに保存したい場合は、文字列ではなくベクターを使用しなければなりません。キーボード入力文字についての情報はCharacter Typeを参照してください。
文字列は正規表現を保持するために便利です。string-match
(Regexp Searchを参照)を使用して、文字列にたいして正規表現をマッチすることもできます。関数match-string
(Simple Match Dataを参照)とreplace-match
(Replacing Matchを参照)は、文字列にたいして正規表現をマッチした後に、文字列を分解・変更するのに便利です。
バッファーのように、文字列は文字列内の文字自身とその文字にたいするテキストプロパティーを含みます。Text Propertiesを参照してください。文字列からバッファーや他の文字列にテキストをコピーする、すべてのLispプリミティブ(Lisp primitives)はコピーされる文字のプロパティーもコピーします。
文字列の表示やバッファーにコピーする関数についての情報はTextを参照してください。文字または文字列の構文についての情報は、Character TypeとString Typeを参照してください。異なるテキスト表現間で変換したり、文字コードのエンコードやデコードを行う関数についてはNon-ASCII Charactersを参照してください。ディスプレイ上の文字列幅の計算にlength
を使用するべきではないことにも注意してください。かわりにstring-width
を使用してください(Size of Displayed Textを参照)。