Модульный Рефал поддерживает следующие типы атомов:
- атомы-литеры или символы (characters) — представляют собой символы как элементы текста;
- атомы-числа — представляют собой целые числа из ограниченного множества;
- атомы-имена или идентификаторы — слова, состоящие из букв латинского алфавита, цифр и символов − и _, начинаются с заглавной буквы;
- атомы-замыкания или атомы-функции — в текущей реализации представляют собой указатели на функции, применяются при косвенном вызове. Подробнее о них будет рассказано в соответствующей главе.
Помимо обычных символов, поддерживаются также escape-последовательности: символы '\n', '\r', '\t' и '\\' означают соответственно символ перевода строки, возврата каретки, табуляции и backslash’а.
Атомами-числами в текущей реализации Рефала являются целые числа, лежащие в диапазоне от 0 до 2³² − 1, записываются как обыкновенные десятичные числа: 1, 42, 666, 4294967295.
Атомы-имена или идентификаторы предназначены в целом для решения тех же задач, что и перечислимые типы во многих языках программирования (C++, C#, Visual Basic, Pascal) — описывают некоторое значение по имени. Однако, в отличие от упомянутых языков, в Рефале их не надо предварительно объявлять и им не поставлены в соответствие целые числа. Примеры идентификаторов: True, Success, Right, Left, NotFound.
Примечание. Традиционно при описании типов данных Рефала используется другая терминология: вместо термина атом используется термин символ (symbol). Таким образом говорят о символах-литерах, символах-числах и т. д. Я сознательно отошёл от такой терминологии, чтобы не вносить путаницу между атомами-литерами (characters) и символами (symbol).
К составным термам относятся:
- простые скобочные термы — записываются как объектные выражения, заключённые в круглые (структурные) скобки;
- так называемые абстрактные типы данных (АТД) — особые скобочные термы, ассоциированные с именем абстрактного типа данных, записываются в квадратных («абстрактных») скобках, внутри которых записывается объектное выражение, предварённое именем АТД. Подробнее о них написано в соответствующей главе.
('*' ('+' 10 N) ('−' T D)) [Table (N 10) (T 20) (D 5)]
Это объектное выражение состоит из двух составных термов. Первый терм является простым скобочным термом, содержащий в свою очередь три терма, первый из которых атом, два других составные. Второй терм является АТД, содержит внутри себя три терма. Заметим, что Table это вовсе не идентификатор, а имя типа данных.