Read Only Strings
-----------------
Type-checking in Guile primitives distinguishes between mutable strings
and read only strings. Mutable strings answer `#t' to `string?' while
read only strings may or may not. All kinds of strings, whether or
not they are mutable return #t to this:
- primitive: read-only-string? x
Return true if OBJ can be read as a string,
This illustrates the difference between `string?' and
`read-only-string?':
(string? "a string") => #t
(string? 'a-symbol) => #f
(read-only-string? "a string") => #t
(read-only-string? 'a-symbol) => #t
"Read-only" refers to how the string will be used, not how the string is
permitted to be used. In particular, all strings are "read-only
strings" even if they are mutable, because a function that only reads
from a string can certainly operate on even a mutable string.
Symbols are an example of read-only strings. Many string functions,
such as `string-append' are happy to operate on symbols. Many
functions that expect a string argument, such as `open-file', will
accept a symbol as well.
Shared substrings, discussed in the previous chapter, also happen to be
read-only strings.