Next: Modifying Strings, Previous: Predicates for Strings, Up: Strings and Characters
以下の関数は、新たに文字列を作成したり、 文字列を連結したり分解して文字列を作成します。
この関数は、文字characterをcount回繰り返して作成した文字列を返す。 countが負であるとエラーを通知する。
(make-string 5 ?x) "xxxxx" (make-string 0 ?x) ""この関数に対比するものに、
char-to-string
(see String Conversion)、make-vector
(see Vectors)、make-list
(see Building Lists)などがある。
この関数は、stringのstartから end(の直前)までの範囲にある文字から成る新たな文字列を返す。 先頭の文字を0で添字付けする。
(substring "abcdefg" 0 3) "abc"ここで、‘a’の添字は0、‘b’の添字は1、‘c’の添字は2である。 したがって、文字列
"abcdefg"
から3文字‘abc’をコピーする。 添字3はコピーする部分文字列の境界の文字位置を表す。 添字が3である文字は、実際には文字列内の4番目の文字である。負の数は文字列の末尾から数える。 したがって、−1は文字列の最後の文字の添字である。 たとえば、
(substring "abcdefg" -3 -1) "ef"この例では、‘e’の添字は−3、‘f’の添字は−2、 ‘g’の添字は−1である。 したがって、‘e’と‘f’を含むが‘g’は含まない。
添字に
nil
を使うと、文字列の長さを意味する。 したがって、つぎのようになる。(substring "abcdefg" -3 nil) "efg"引数endを省略することは、
nil
を指定することと等価である。 そのため、(substring
string0)
は、 string全体をコピーしたものを返す。(substring "abcdefg" 0) "abcdefg"しかし、このような目的には
copy-sequence
を勧める (see Sequence Functions)。stringからコピーした文字にテキスト属性があれば、 新たな文字列にもそのテキスト属性をコピーする。 see Text Properties。
substring
は第1引数としてベクトルも受け付ける。 たとえば、つぎのとおり。(substring [a b (c) "d"] 1 3) [b (c)]startやendが整数でも
nil
でもないと、 エラーwrong-type-argument
を通知する。 startがendよりうしろの文字を指していたり、 いずれかの整数がstringの範囲外であると エラーargs-out-of-range
を通知する。この関数と対照的なのが
buffer-substring
(see Buffer Contents)であり、 カレントバッファ内のテキストの一部を収めた文字列を返す。 文字列の先頭は0で添字付けするが、バッファの先頭は1で添字付けする。
この関数は、渡した引数の文字から成る (テキスト属性があればそれも含めて)新たな文字列を返す。 引数は、文字列、数のリスト、数のベクトルである。 引数自身は変更しない。
concat
に引数を指定しないと空文字列を返す。(concat "abc" "-def") "abc-def" (concat "abc" (list 120 121) [122]) "abcxyz" ;;nil
は空シーケンス (concat "abc" nil "-def") "abc-def" (concat "The " "quick brown " "fox.") "The quick brown fox." (concat) ""関数
concat
は、 既存の文字列とeq
ではない新たな文字列をつねに作り出す。引数が(整数のシーケンスではなく)整数であると、 その整数の表示表現を構成する文字列に変換する。 この機能を使わないでほしい。 削除する予定である。 読者がこの機能を使っていたら、今すぐプログラムを直すこと! 整数をこのような10進数に変換する正しい方法は、
format
(see Formatting Strings)やnumber-to-string
(see String Conversion)を使うことである。(concat 137) "137" (concat 54 321) "54321"他の連結関数については、 Mapping Functionsの
mapconcat
、 Vectorsのvconcat
、 Building Listsのappend
を参照。
stringを正規表現separatorsの一致箇所で区切って 部分文字列に分解する。 separatorsに一致するそれぞれの部分が分割箇所を定義する。 分割箇所のあいだにある部分文字列をリストにまとめ、これを値とする。 separatorsが
nil
である(つまり、省略する)と、 デフォルトは"[ \f\t\n\r\v]+"
である。たとえば、つぎのようになる。
(split-string "Soup is good food" "o") ("S" "up is g" "" "d f" "" "d") (split-string "Soup is good food" "o+") ("S" "up is g" "d f" "d")文字列の先頭や末尾で一致した場合には、 リストの先頭や末尾に空文字列は現れない。
(split-string "out to moo" "o+") ("ut t" " m")空の一致箇所は、それらが連続していない限り分割点になる。
(split-string "Soup is good food" "o*") ("S" "u" "p" " " "i" "s" " " "g" "d" " " "f" "d") (split-string "Nice doggy!" "") ("N" "i" "c" "e" " " "d" "o" "g" "g" "y" "!")