Go to the first, previous, next, last section, table of contents.


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? OBJ
Return true of 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.


Go to the first, previous, next, last section, table of contents.