srfi.118 - Simple adjustable-size strings ¶This SRFI defines two string mutating operations that can change
the length of the string: string-append! and string-replace!.
Note that, in Gauche, the body of strings is immutable; when you mutate
a string, Gauche creates a fresh new string body and just switch a pointer
in the original string to point the new string body. So it is not a
problem to implement this SRFI in Gauche, but it also means you won’t
get any performance benefit by using these operations. Using immutable
counterparts (string-append and string-replace) gives
you the same performance. (Be aware that the interface is slightly
different from the immutable versions.)
We provide this module only for the compatibility. Gauche-specific
programs should stay away from this module. Particularly, avoid
code like the example in SRFI-118 document (build a string by
append!-ing small chunks at a time)—they’re quadratic on Gauche.
[SRFI-118]{srfi.118}
The string argument must be a mutable string.
Modify string by appending values, each of which is
either a character or a string.
(rlet1 a (string-copy "abc") (string-append! a #\X "YZ")) ⇒ "abcXYZ"
[SRFI-118]{srfi.118}
The dst argument must be a mutable string.
Replace dst between dst-start (inclusive) and
dst-end (exclusive) with a string src. The optional
arguments src-start and src-end limits the region of
src to be used.
Be aware that the order of arguments differ from
SRFI-13’s string-replace (see Other string operations);
string-replace! resembles to string-copy! (also in SRFI-13),
rather than string-replace.
(rlet1 a (string-copy "abc") (string-replace! a 1 2 "XYZ")) ⇒ "aXYZc"