For Development HEAD DRAFTSearch (procedure/syntax/module):

11.25 srfi.118 - 簡単な可変長文字列

Module: srfi.118

このSRFIは、文字列の長さを変えるような破壊的変更を行う文字列操作ルーチンを 提供します。

Gaucheでは、文字列の本体は変更不可になっています。 文字列の破壊的変更は、 実際には新たな文字列本体を作成して、元の文字列が指している本体とポインタを 置き換えることで実現されます。 ですのでこのsrfiをGaucheに実装すること自体は全く問題ないのですが、 これらのAPIを使ったからといって性能上の恩恵にあずかれるわけではありません。 変更不可な文字列をstring-append and string-replaceで 切り貼りするのと、性能的には何ら変わりません。 (このモジュールのAPIは、変更不可文字列を扱うAPIと若干異なることに注意してください。)

このモジュールは、互換性のためだけ提供されます。 Gaucheに依存したプログラムはこのモジュールを使う必要はないでしょう。 特に、SRFI-118のドキュメントにある例は避けるのが懸命です (文字列を、小さな塊ごとに破壊的にappendしてゆくという実装ですが、 Gaucheではそれは文字列の長さの2乗に比例した時間がかかってしまいます)。

Function: string-append! string values …

[SRFI-118]{srfi.118} string引数は変更可能な文字列でなければなりません。 残りの引数valuesはそれぞれ文字または文字列です。それらをstringに 破壊的に追加します。

(rlet1 a (string-copy "abc")
  (string-append! a #\X "YZ"))
 ⇒ "abcXYZ"
Function: string-replace! dst dst-start dst-end src :optional src-start src-end

[SRFI-118]{srfi.118} dst引数は変更可能な文字列でなければなりません。 dst中の、dst-start(inclusive)からdst-end(exclusive)までの 内容が文字列srcで置き換えられます。省略可能引数 src-startsrc-endで、srcの使う部分を制限することができます。

引数の順序がSRFI-13のstring-replaceとは異なることに 注意して下さい (他の文字列操作参照)。 string-replace!の引数順は同じくSRFI-13にあるstring-copy!に 似せてあります。

(rlet1 a (string-copy "abc")
  (string-replace! a 1 2 "XYZ"))
 ⇒ "aXYZc"


For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT