連結:言語・数学・コンピューティングにおける文字列と列の結合
連結とは、2つ以上の文字列または列を端から端へつなぐ操作である。日常言語、形式言語理論、プログラミング、データベースで用いられ、空の単位元を持つ結合的な操作である。
連結とは、ある列の直後に別の列を置くことで新しい列を作る、単純でありながら広く用いられる操作である。日常的な語の例では、「snow」と「ball」をつなげると「snowball」になる。コンピューティングと数学でも同じ考え方が文字列、リスト、その他の有限列に適用される。結果は、最初の列の要素に続けて2番目の列の要素を含む。
特性と基本的性質
この操作には、扱いやすい少数の標準的な性質がある。最も重要なのは、連結が結合的であること、すなわち (a+b)+c = a+(b+c) であり、括弧によるグループ化は結果に影響しないことである。一般に可換ではなく、a+b は通常 b+a と異なる。空列(文字列ではしばしば「""」と表記される)は単位元として働き、""+s = s+"" = s となる。有限列では、結果の長さは被演算子の長さの和に等しい。
表記法と一般的な例
文脈によって異なる表記法が用いられる。理論的な分野では、並置(ab)や中点が一般的である。多くのプログラミング言語では文字列の連結に + を用い、Python、Java、JavaScriptがその例である。SQLでは、標準SQLの方言において二重パイプ演算子(||)が使われる。一部の言語には concat(s1,s2) のような名前付き関数や、Cの strcat のようなライブラリルーチンがある。関数型言語では、リストの連結に ++ などの記号がよく使われる。概要と参照先については連結を参照。
形式言語と代数学における連結
形式言語理論では、この操作は言語(文字列の集合)にも拡張される。連結 L1L2 は、L1から1つの文字列を取り、その後にL2から1つの文字列を続けて作られる、すべての文字列の集合である。連結を繰り返すことからクリーネ閉包が生じ、これは言語の反復を有限回(0回を含む)行うことを表す。代数学的には、あるアルファベット上のすべての文字列の集合は、連結とともに自由モノイドを形成する。これは、結合的な二項演算と単位元を備えた構造である。
用途、例、および区別
連結は、テキスト処理、プログラミング、データの書式設定、パターン照合に広く見られる。ファイルパスの構築、メッセージの生成、コンパイラにおけるトークンの結合、正規表現の組み立てといった操作の基礎となる。数値を組み合わせる数値の加算や、列をつなぐのではなく操作を連鎖させる関数合成とは異なる。関連する操作には列の交互配置やマージがあり、これらは各被演算子内の相対的な順序を保ちながら両方の要素を混ぜるため、単純な連結とは区別される。
実用上の主な注意点
- 性能:言語によってはコピーが発生するため、連結を繰り返すとコストが高くなることがある。多くのプラットフォームでは、長い結果を効率的に組み立てるためのビルダーやバッファが提供されている。
- 型の挙動:一部の言語では + が異なる型に対してオーバーロードされており、文字列以外の値を連結する際に暗黙の変換が生じることがある。
- 境界事例:空の被演算子やnullに類する値の扱いはシステムごとに異なるため、予期しない結果を避けるには明示的に処理すべきである。
関連項目
著者
AlegsaOnline.com 連結:言語・数学・コンピューティングにおける文字列と列の結合 Leandro Alegsa
URL: https://ja.alegsaonline.com/art/22365