Something that has been boggling my mind is that I don't understand why some (most) string routines are functions that give a result and some string routines are procedures which change the original string.
S2 := Copy(S1,3,2);
Copies into S2 from S1 the 2 characters starting from the 3rd position.
Delete(S,3,2);
Deletes from S the 2 characters starting from the 3rd position.
I would have thought it more consistent to have Delete (and a few others) behave like most other string routines, so you could write:
S2 := Delete(S1,3,2);
Why isn't that the case?