status: final (2016-09-06)
keywords: Data Structure, R7RS Large, R7RS Large: Red Edition, Text
See also SRFI 118: Simple adjustable-size strings, SRFI 130: Cursor-based string library, SRFI 140: Immutable Strings, and SRFI 152: String Library (reduced).In Scheme, strings are a mutable data type. Although it "is an error" (R5RS and R7RS) to use string-set!
on literal strings or on strings returned by symbol->string
, and any attempt to do so "should raise an exception" (R6RS), all other strings are mutable.
Although many mutable strings are never actually mutated, the mere possibility of mutation complicates specifications of libraries that use strings, encourages precautionary copying of strings, and precludes structure sharing that could otherwise be used to make procedures such as substring
and string-append
faster and more space-efficient.
This SRFI specifies a new data type of immutable texts. It comes with efficient and portable sample implementations that guarantee O(1) indexing for both sequential and random access, even in systems whose string-ref
procedure takes linear time.
The operations of this new data type include analogues for all of the non-mutating operations on strings specified by the R7RS and most of those specified by SRFI 130, but the immutability of texts and uniformity of character-based indexing simplify the specification of those operations while avoiding several inefficiencies associated with the mutability of Scheme's strings.