Когда это нужно
Начните здесь, если исходный текст отвергается ещё до выполнения или непонятно, обозначают ли скобки вызов либо данные. Считыватель отвечает за написание и структуру; вычисление ещё не началось.
Проверьте запуском
'(alpha 1 2/3 #u8(4 5))Наблюдаемый результат
(alpha 1 2/3 #u8(4 5))Разбор примера
Начальная кавычка сохраняет всю форму как данные. Считыватель распознаёт символ-идентификатор, целое, рациональное число и байтовый вектор, но ничего не вызывает и не вычисляет. Без кавычки alpha оказался бы в позиции процедуры.
Как рассуждать
- Грамматики целых, рациональных и вещественных токенов не пересекаются; ведущие нули и не конечные числа отвергаются.
- Формы списков, точечных пар, векторов, байтовых векторов, строк, символов, quote, quasiquote и комментариев закреплены.
- Ошибки чтения имеют коды E1xx и диапазон исходника; неверный UTF-8 отклоняется на границе вызова.
Быстрый выбор
| Что требуется | Запись | Что создаёт считыватель |
|---|---|---|
| имя | alpha | символ-идентификатор для последующего поиска |
| текст | "alpha" | неизменяемая строка |
| правильный список как данные | '(alpha 1) | цепочка пар с () в конце |
| точечная пара как данные | '(alpha . 1) | одна пара с хвостом 1 |
| индексируемые значения | #(1 2) | вектор |
| байты | #u8(1 2) | неизменяемый байтовый вектор |
Частая ошибка
Префиксы основания и точности вроде #x и #e находятся вне текущего профиля.
Текущие границы
- Язык не нормализует молча переводы строк, пути или кодировку среды.
Куда дальше
Далее разберите порядок вычисления, а за полным перечнем допустимых токенов откройте грамматику чтения.