## 2.2 Virtual Strings

The data to be sent or to be written consists of a sequence of integers, atoms, floats, and strings. If only strings were allowed to be sent as information, the data would have to be transformed into a string. This would be clumsy and inefficient with regard to both space and time.

Mozart uses virtual strings for this purpose instead. A virtual string is either an atom, a float, an integer, a string, or a tuple with label `'#'`, whose subtrees are virtual strings themselves. For instance,

> `12#(2#fast#4#"U")#~3.1415`

is a virtual string. In the above example it is quite clear, that `#` stands for concatenation (i. e., for virtual concatenation).

There is predefined functionality for virtual strings, like testing, by `IsVirtualString`, converting to a string, by `VirtualString.toString`, and changing of signs, by `VirtualString.changeSign`. The latter procedure is quite important, because

  `{Browse 12#(2#fast#4#"U")#~3.1415}`

reveals that the usual unary minus sign (i. e., `-`) is used rather than the Oz operator `~`.

The procedure `VirtualString.changeSign` provides the possibility to choose any virtual string as minus sign in numbers. It takes as input arguments two virtual strings, and substitutes every occurrence of the `-` character as a unary minus sign in numbers of the first argument by the second argument. For example,

  `{VirtualString.changeSign 12#(2#fast#4#"U")#~3.1415 '~'}`

returns the virtual string with the Oz-style unary minus sign.

Note that in order to display virtual strings in readable form in the Oz Browser, you have to configure the Representation, Type option, see also ``The Oz Browser''. In the following we assume that the Browser is configured for displaying virtual strings.