---
This message is a formal comment which was submitted to [EMAIL PROTECTED],
following the requirements described at: http://www.r6rs.org/process.html
---
Type: enhancement
Priority: minor
Component: base library (strings)
The memory allocation for an N-character string is not a fixed multiple
of N, unless one allocates a fixed 24 or 32 bits per character, which
most Scheme implementations probably won't do. Hence a string will
need a variable-sized buffer, which may need to be re-sized, for example
after:
(define str (make-string 1000 #\space))
(string-set! str 500 #\x20000;)
Since the allocated buffer is variable-sized, why not allow the number
of characters to change?
Thus in 5.9 replace:
This number is an exact, non-negative integer
that is fixed when the string is created.
by:
This number is an exact, non-negative integer
which has an initial value, but may vary as the string is modified.
Consider also that string-set! is an awkward function for working with
string. You almost never want to modify a single character in-place in
a string. Instead, the most useful way to create a string is by
appending to it. Hence I suggest adding:
(string-append! str1 str2)
(string-append! str1 ch2)
or more generally:
(string-append! str1 str-or-char ...)
These modify str1 in place. They return the unspecified value.
(string-length str1) is increment by (string-length str2) or 1,
respectively.
Alternative names string-append-string! and string-append-char!
might be preferable.
These functions are very useful for "building" strings - much
more useful that string-set!. Futhermore, I'd argue that the
append functions are more "basic", since string-set! may
require expansion or contraction in the middle of a buffer.
One might also support string-append-codepoint! if we allow
O(1) code-point-level access.
If we have variable length strings one might also consider
replacing, inserting, and deleting substrings. Those are a
little hairier, since they get into the indexing discussion:
should indexes by scalar values or code-point indexes or
should we allow both. Or should we allow sub-string delimited
by "markers"? (I like the latter, though it makes strings a
bit more heavy-weight.)
For now, I'm just proposing string-append! since it is simple
to specify, simple to implement, and very useful.
--
--Per Bothner
[EMAIL PROTECTED] http://per.bothner.com/
_______________________________________________
r6rs-discuss mailing list
[email protected]
http://lists.r6rs.org/cgi-bin/mailman/listinfo/r6rs-discuss