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$