the inn-keeper Procrustes who used to make sure that his guests fitted the bed by either stretching them 
out on a rack or cutting their feet off.
 
    If you now try
 
 
LET
 A$()="COR BLIMEY"
 
&
 
 
PRINT
 A$;"."
 
you will see that the same thing has happened again (this time with spaces put in) because A$() counts as 
a substring.
 
 
LET
 A$="COR BLIMEY"
 
will do it properly
 
    Slicing may be considered as having priority 12, so, for instance
 
 
LEN
 "ABCDEF"(2 
TO
 5) = 
LEN
("ABCDEF"(2 
TO
 5)) = 4
 
Complicated string expressions will need brackets round them before they can be sliced. For example,
 
 "ABC"+"DEF"(1 
TO
 2) = "ABCDE"
 
        ("ABC"+"DEF")(1 
TO
 2) = "AB"
 
Summary
 
    Slicing, using 
TO
. Note that this notation is non-standard.
 
Exercises
 
1. Some BASICs (not the ZX81 BASIC) have functions called LEFT$, RIGHT$, MID$ & TL$.
 
    LEFT$(A$,N) gives the substring of A$ consisting of the first N characters.
 
    RIGHT$(A$,N) gives the substring of A$ consisting of the characters from the Nth on.
 
    MID$(A$,N1,N2) gives the substring of A$ consisting of N2 characters starting at the N1th.
 
    TL$(A$) gives the substring of A$ consisting of all its characters except the first.
 
    How would you write these in ZX81 BASIC? Would your answers work with strings of length 0 or 1?
 
2. Try this sequence of commands:
 
 
LET
 A$="X*+*Y"
 
 
LET
 A$(2)=
CHR$
 11  [the string quote character]
 
 
LET
 A$(4)=
CHR$
 11
 
 
PRINT
 A$
 
    A$ is now a string with string quotes inside it! So there is nothing to stop you doing this if you are 
persevering enough, but clearly if you had
 
originally typed
 
 
LET
 A$="X"+"Y"
 
the part to the right of the equals sign would have been treated as an expression, giving A$ the value "XY".
 
    Now type
 
 
LET
 B$="X""+""Y"
 
    You will find that although A$ & B$ look the same when printed out, they are not equal - try
 
 
PRINT
 A$=B$