[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.8 srfi-13 - 文字列ライブラリ

Module: srfi-13

文字列に関連する関数の大きなセットを定義しています。 Gaucheでは、それらの関数はいくつかのファイルに分割されており、 (use srfi-13)というフォームは単にそれらのファイルの オートロードのセットアップをするだけです。 したがって、スクリプトのスタートアップを遅くするようなことは ありません。 詳細な仕様とデザインに関する議論については、SRFI-13 (SRFI-13) を参照して下さい。 このマニュアルは、関数のAPIのリファレンスとして提供されます。 いくつかのSRFI-13の関数は、Gaucheのビルトインになっており、 ここにはリストされていないものもあります。 注意: SRFI-13のドキュメントは、これらの関数を実装するモジュールの 名前を“string-lib”と“string-lib-internals”とすることを推奨しています。 Gaucheでは、一貫性のために“srfi-13”と名付けています。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.8.1 一般規約

文字列ライブラリのAPIにはいくつか共通するものがありますが、 それぞれの関数の説明において繰り返しません。

引数の仕様

以下の引数名はその型を暗に表しています。

s, s1, s2

これらの引数は文字列でなければなりません。

char/char-set/pred

この引数は、文字、文字セットオブジェクト、あるいは1つの文字を引数に取り 真偽値を返す述語のいずれかです。“文字にchar/char-set/predを適用する” の意味はそれぞれ、char/char-set/predが文字ならば与えられた文字と比較される、 char/char-set/predが文字セットならばその文字セットに与えられた文字が 含まれるかを検査する、char/char-set/predが述語ならばそれを与えられた 文字に適用する、となります。“ある文字がchar/char-set/predを満足する” とは、その文字への前述のような適用が真値を返すという意味になります。

start, end

SRFI-13の関数の多くは、その操作が実行される対象入力文字列の 範囲を限定する開始インデックスと終了インデックスをオプショナルな 引数として取ります。開始(start番目)の文字は含まれ、 終了(end番目)の文字は含まれません。 これらが指定されるとき、0 <= start <= end <= length of the stringが 満たされなければなりません。startendのデフォルト値は、 それぞれ0と文字列の長さです。

`shared'バージョン

いくつかの関数は、その名前に“/shared”が付きます。 SRFI-13では、それらの関数はより良いパフォーマンスのために 入力文字列の一部を共有しても良いと定義しています。 Gaucheは、共有文字列という概念を持っていませんし、 それらの関数は単に共有でないバージョンの変名に過ぎません。 しかし、Gaucheは内部的には文字列の保存場所を共有しているので、 一般的には部分文字列をコピーするオーバヘッドについて心配する 必要はありません。

`right'バージョン

ほとんどの関数は、入力文字列を左から右へと扱います。 いくつかの関数は、その名前に“-right”が付き、右から左へと 扱うものがあります。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.8.2 文字列についての述語

Function: string-null? s

[SRFI-13] sが空文字列、""なら、#tを返します。

Function: string-every char/char-set/pred s &optional start end

[SRFI-13] sに含まれる全ての文字がchar/char-set/predを 満足するかを検査します。満足するならば、string-everyは 最後に適用されたchar/char-set/predが返した値を戻り値とします。 どの適用も#fを返した場合は、string-everyはすぐに #fを返します。

Function: string-any char/char-set/pred s &optional start end

[SRFI-13] sに含まれるいずれかの文字がchar/char-set/pred を満足するかを検査します。いずれかの文字が満足するならば、 string-anyはその適用が返した値を戻り値とします。 どの文字もchar/char-set/predを満たさなければ、#fが返ります。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.8.3 文字列の構築子

Function: string-tabulate proc len

[SRFI-13] procは整数を1つ引数として取り文字を返す手続きで なければなりません。string-tabulateは、そのi番目の 文字が(proc i)で計算されるような文字列を返します。

 
(string-tabulate
  (lambda (i) (integer->char (+ i #x30))) 10)
 ⇒ "0123456789"
Function: reverse-list->string char-list

[SRFI-13] ≡ (list->string (reverse char-list)).


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.8.4 文字列の選択

Function: substring/shared s start &optional end

[SRFI-13] Gaucheでは、引数endがオプショナルであることを除いて、 substringと同じです。

 
(substring/shared "abcde" 2) ⇒ "cde"
Function: string-copy! target tstart s &optional start end

[SRFI-13] 文字列sを、文字列targettstart番目以降へコピーします。 オプションの引数startendは、sの範囲を制限します。 コピーされた文字列がtargetの終端を越えたらエラーが通知されます。

 
(define s (string-copy "abcde"))
(string-copy! s 2 "ZZ")
s ⇒ "abZZe"
Function: string-take s nchars
Function: string-drop s nchars
Function: string-take-right s nchars
Function: string-drop-right s nchars

[SRFI-13] string-takeは、sの最初のnchars文字からなる文字列を返します。 string-dropは、sから最初のnchars文字からなる文字列を 除いた残りを返します。*-rightバージョンは、文字列の最後から数えます。 返される文字列はいつもsのコピーであり、どの文字も削除されないことが 保証されています。

 
(string-take "abcde" 2) ⇒ "ab"
(string-drop "abcde" 2) ⇒ "cde"

(string-take-right "abcde" 2) ⇒ "de"
(string-drop-right "abcde" 2) ⇒ "abc"
Function: string-pad s len &optional char start end
Function: string-pad-right s len &optional char start end

[SRFI-13] 文字列slenより短い場合は、charがそれぞれ左か 右にパディングされた長さlenの文字列を返します。 slenよりも長い場合は、len文字が右端か左端から 取り除かれます。Charのデフォルト値は#\spaceです。 startendが与えられると、sの部分文字列がソース 文字列として使われます。

 
(string-pad "abc" 10)    ⇒ "       abc"
(string-pad "abcdefg" 3) ⇒ "efg"

(string-pad-right "abc" 10) ⇒ "abc       "

(string-pad "abcdefg" 10 #\+ 2 5)
  ⇒ "+++++++cde"
Function: string-trim s &optional char/char-set/pred start end
Function: string-trim-right s &optional char/char-set/pred start end
Function: string-trim-both s &optional char/char-set/pred start end

[SRFI-13] sからchar/char-set/predにマッチする文字を削除します。 String-trimsの左から文字を削除し、 string-trim-rightは右から、string-trim-bothは 両端から削除します。 Char/char-set/predのデフォルト値は#[\s]、つまり空白文字の 文字セットです。startendが与えられると、sの部分文字列が ソース文字列として使われます。

 
(string-trim "   abc  ")       ⇒ "abc  "
(string-trim-right "   abc  ") ⇒ "   abc"
(string-trim-both "   abc  ")  ⇒ "abc"

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.8.5 文字列の色々な比較

Function: string-compare s1 s2 proc< proc= proc> &optional start1 end1 start2 end2
Function: string-compare-ci s1 s2 proc< proc= proc> &optional start1 end1 start2 end2

[SRFI-13]

Function: string= s1 s2 &optional start1 end1 start2 end2
Function: string<> s1 s2 &optional start1 end1 start2 end2
Function: string< s1 s2 &optional start1 end1 start2 end2
Function: string<= s1 s2 &optional start1 end1 start2 end2
Function: string> s1 s2 &optional start1 end1 start2 end2
Function: string>= s1 s2 &optional start1 end1 start2 end2

[SRFI-13]

Function: string-ci= s1 s2 &optional start1 end1 start2 end2
Function: string-ci<> s1 s2 &optional start1 end1 start2 end2
Function: string-ci< s1 s2 &optional start1 end1 start2 end2
Function: string-ci<= s1 s2 &optional start1 end1 start2 end2
Function: string-ci> s1 s2 &optional start1 end1 start2 end2
Function: string-ci>= s1 s2 &optional start1 end1 start2 end2

[SRFI-13]

Function: string-hash s &optional bound start end
Function: string-hash-ci s &optional bound start end

[SRFI-13]


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.8.6 文字列のプリフィックスとサフィックス

Function: string-prefix-length s1 s2 &optional start1 end1 start2 end2
Function: string-suffix-length s1 s2 &optional start1 end1 start2 end2
Function: string-prefix-length-ci s1 s2 &optional start1 end1 start2 end2
Function: string-suffix-length-ci s1 s2 &optional start1 end1 start2 end2

[SRFI-13]

Function: string-prefix? s1 s2 &optional start1 end1 start2 end2
Function: string-suffix? s1 s2 &optional start1 end1 start2 end2
Function: string-prefix-ci? s1 s2 &optional start1 end1 start2 end2
Function: string-suffix-ci? s1 s2 &optional start1 end1 start2 end2

[SRFI-13]


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.8.7 文字列の探索

Function: string-index s char/char-set/pred &optional start end
Function: string-index-right s char/char-set/pred &optional start end

[SRFI-13] 文字列sの中で、char/char-set/predにマッチする 最初の要素を探し、そのインデックスを返します。 sの中にchar/char-set/predが見つからない場合は、#fを 返します。オプションのstartendは、sの中で検索対象と なる範囲を制限します。

 
(string-index "Aloha oe" #\a) ⇒ 4
(string-index "Aloha oe" #[Aa]) ⇒ 0
(string-index "Aloha oe" #[\s]) ⇒ 5
(string-index "Aloha oe" char-lower-case?) ⇒ 1
(string-index "Aloha oe" #\o 3) ⇒ 6

ポータビリティよりも速度を重視する場合は、Gaucheのビルトイン手続き string-scan(文字列を扱うその他の手続き)を参照して下さい。

Function: string-skip s char/char-set/pred &optional start end
Function: string-skip-right s char/char-set/pred &optional start end

[SRFI-13] char/char-set/predにマッチしない最初の要素を探し、 そのインデックスを返します。そのような要素が見つからない場合、#fを 返します。オプションのstartendは、sの中で検索対象と なる範囲を制限します。

Function: string-count s char/char-set/pred &optional start end

[SRFI-13] sの中で、char/char-set/predにマッチする要素の数を カウントします。オプションのstartendは、sの中で検索対象と なる範囲を制限します。

Function: string-contains s1 s2 &optional start1 end1 start2 end2
Function: string-contains-ci s1 s2 &optional start1 end1 start2 end2

[SRFI-13] s1の中で、文字列s2を探します。見つかった場合は、 s1でマッチした文字列が始まるインデックスを返します。そうでなければ、 #fを返します。 オプションのstart1end1start2end2は、 s1s2の範囲を制限します。

ポータビリティよりも速度を重視する場合は、Gaucheのビルトイン手続き string-scan(文字列を扱うその他の手続き)を参照して下さい。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.8.8 文字列のケース(大文字小文字)マッピング

Function: string-titlecase s &optional start end
Function: string-titlecase! s &optional start end

[SRFI-13]

Function: string-upcase s &optional start end
Function: string-upcase! s &optional start end

[SRFI-13]

Function: string-downcase s &optional start end
Function: string-downcase! s &optional start end

[SRFI-13]


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.8.9 文字列の反転と追加

Function: string-reverse s &optional start end
Function: string-reverse! s &optional start end

[SRFI-13] sの文字の位置を逆順にした文字列を返します。 string-reverse!sそのものを変更します。

 
(string-reverse "mahalo") ⇒ "olaham"
(string-reverse "mahalo" 3) ⇒ "ola"
(string-reverse "mahalo" 1 4) ⇒ "aha"

(let ((s (string-copy "mahalo")))
  (string-reverse! s 1 5)
  s)
  ⇒ "mlahao"
Function: string-concatenate string-list

[SRFI-13] 文字列のリストを連結します。

 
(string-concatenate '("humuhumu" "nukunuku" "apua" "`a"))
  ⇒ "humuhumunukunukuapua`a"
Function: string-concatenate/shared string-list
Function: string-append/shared s …

[SRFI-13] string-concatenatestring-appendの“共有” バージョンです。Gaucheでは、これらは単に別名です。

Function: string-concatenate-reverse string-list
Function: string-concatenate-reverse/shared string-list

[SRFI-13] string-listを連結する前に逆順にします。 Gaucheでは、“共有”バージョンは全く同じ動作をします。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.8.10 文字列のマッピング

Function: string-map proc s &optional start end
Function: string-map! proc s &optional start end

[SRFI-13] string-mapは、sの全ての文字に対してprocを 適用し、その結果を文字列に集めそれを返します。 一方、string-map!sそのものを変更します。

 
(string-map char-upcase "wikiwiki") ⇒ "WIKIWIKI"
(string-map char-upcase "wikiwiki" 4) ⇒ "WIKI"

(let ((s (string-copy "wikiwiki")))
  (string-map! char-upcase s 4)
  s)
  ⇒ "wikiWIKI"
Function: string-fold kons knil s &optional start end
Function: string-fold-right kons knil s &optional start end

[SRFI-13]

Function: string-unfold p f g seed &optional base make-final

[SRFI-13]

Function: string-unfold-right p f g seed &optional base make-final

[SRFI-13]

Function: string-for-each proc s &optional start end

[SRFI-13]

Function: string-for-each-index proc s &optional start end

[SRFI-13]


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.8.11 文字列のローテーション

Function: xsubstring s from &optional to start end

[SRFI-13]

Function: string-xcopy! target tstart s sfrom &optional sto start end

[SRFI-13]


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.8.12 他の文字列操作

Function: string-replace s1 s2 start1 end1 &optional start2 end2

[SRFI-13] 文字列s1start1文字目(inclusive)からend1文字目(exclusive) までを文字列s2に置き換えた文字列を新たに作って返します。s1, s2は 変更されません。 オプショナルな引数start2end2が与えられた場合は、 s2がまずそれらによって切り取られて置換文字列として使われます。 置き換える隙間の大きさ、つまり(- end1 start1)s2と同じ長さである必要はありません。 実質的に、この手続きは次のコードと等価です。

 
(string-append (substring s1 0 start1)
               (substring s2 start2 end2)
               (substring s1 end1 (string-length s1)))
Function: string-tokenize s &optional token-set start end

[SRFI-13] 文字列 s を、token-set で指定される文字セットで 構成される、空でない最大限連続した文字のシーケンスのそれぞれを 要素とするリストを返します。 token-set のデフォルト値は char-set:graphic (定義済みの文字セット参照)。

同様の機能を提供する、しかし異なる基準を持つ、Gauche の組み込み手続き string-split (文字列を扱うその他の手続き 参照) も見て下さい。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.8.13 文字列のフィルタリング

Function: string-filter s char/char-set/pred &optional start end
Function: string-delete s char/char-set/pred &optional start end

[SRFI-13]


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.8.14 低レベルな文字列に関する手続き

Function: string-parse-start+end proc s args
Function: string-parse-final-start+end proc s args

[SRFI-13]

Macro: let-string-start+end (start end [rest]) proc-exp s-exp args-exp body …

[SRFI-13]

Function: check-substring-spec proc s start end
Function: substring-spec-ok? s start end

[SRFI-13]

Function: make-kmp-restart-vector s &optional c= start end

[SRFI-13]

Function: kmp-step pat rv c i c= p-start

[SRFI-13]

Function: string-kmp-partial-search pat rv s i &optional c= p-start s-start s-end

[SRFI-13]


[ < ] [ > ]   [ << ] [ Up ] [ >> ]

This document was generated by Shiro Kawai on November, 22 2009 using texi2html 1.78.