External representations can also be used for input and output. Scheme's syntax has the property that any sequence of characters that is an expression is also the external representation of some object. The syntax of external representations of various kinds of objects accompanies the description of the primitives for manipulating the objects in the appropriate sections of chapter section Standard procedures . Storage model Variables and objects such as pairs, vectors, and strings implicitly denote locations or sequences of locations. A string, for example, denotes as many locations as there are characters in the string.
Every location is marked to show whether it is in use.
No variable or object ever refers to a location that is not in use. Whenever this report speaks of storage being allocated for a variable or object, what is meant is that an appropriate number of locations are chosen from the set of locations that are not in use, and the chosen locations are marked to indicate that they are now in use before the variable or object is made to denote them. To express this, it is convenient to imagine that every object that denotes locations is associated with a flag telling whether that object is mutable or immutable. It is an error to attempt to store a new value into a location that is denoted by an immutable object. Proper tail recursion Implementations of Scheme are required to be properly tail-recursive .