public SchemeString SubString(int start, int end)
{
if (start < 0)
throw new ArgumentOutOfRangeException("start", start, "substring start < 0");
if (end > Length)
throw new ArgumentOutOfRangeException("end", end, "substring end > string-length");
if (start > end)
throw new ArgumentOutOfRangeException("start", start, "substring start > end");
ensureArray();
char[] s = new char[end - start];
for (int i = start; i < end; i++)
s[i - start] = _chars[i];
return new SchemeString(s, true);
}