Программа состоит из токенов и разделителей.
К разделителям относятся символы и последовательности символов, не преобразуемые в токены. Это пробел, управляющие символы (перевод строки, табуляция и т. п.), не входящие в состав более сложных токенов. Разделители никак не влияют на смысл программы, кроме как разделяют пары токены, которые в отсутствие разделителей могут быть проинтерпретированы как один.
Токены являются минимальными неделимымми синтаксическими единицами языка. Токены могут быть символьными, именными и ограниченными.
К символьным относятся токены, представляющие собой отдельные символы, представленные оперделённой фиксированной последовательностью кодов, они самоограничены — символьный токен не может быть проинтерпретирован как часть другого символьного или именного токена. Примеры: +
, *
, (
.
К именным относятся токены, состоящие из произвольных символов, не принадлежащих к символьным токенам или ограничителям ограниченных токенов, и ограниченные разделителями или символьными и ограниченными токенами. Примеры: Abcd
, 010b
, ~12
, sin
, lit?
.
К ограниченным относятся токены, состоящие из прозвольных символов (не являющихся ограничителями), ограниченных сначала и конца символами ограничителями. Примеры: "hello"
, # comment(lf)
Представление чисел в программе включает следующие части:
Обязательной является только мантисса.
Для представления мантиссы могут использоваться следующие символы:
0
…9
~
.
По умолчанию, если не стоит показатель формата, число представлено в десятичной системе.
Символ изменения знака указывает, что цифры слева и справа имеют проивоположный знак. Причём слева, до первого символа цифры будут иметь положительное значение. После (первого) знака — отрицательное. Таким образом наиболее простое представление отрицательных знаков подобно традиционному, только вместо унарного минуса стоит тильда: ~1.5 — минус полтора. Однако такая система позволяет задавть также числа в логарифмической форме (~1~.25 = -1 + 0.25) и в двоичной форме с дополнением до двух: (~1~000b = -8).
Дробная и периодическая дробная части указываются точкой. Доступные формы следующие:
1
;
1.25
;
1..3
= 1.(3) = 4/3.
Любая из частей может быть пустой, кроме периодической.
Есть специальные числа: .. и ~.., обозначающие положительную и отрицательную бесконечность соответственно (при использовании юникода возможно использование традиционного символа).
Величину мантиссы можно вычислить по следующей формуле:
m = i + f / qlen(f) + p / qlen(f) / (qlen(p)–1)
Порядок определяет масштаб числа. Он отделяется от мантиссы знаком вопроса (?
). Его представление полнстью повторяет представление мантиссы, так что позможен даже дробный порядок. Так число 1?3.5
= 103,5
Показатели формата позволяют использовать различные представления чисел и масштабировать числа. Следует отметить, что регистр важен.
Показатель | Формат | Пример | Примечание |
---|---|---|---|
b | Двоичный | 101b = 5 | |
h | Шестнадцатеричный | 0Fh = 15 | |
o | Восьмеричный | 37o = 31 | Используется только строчная буква, чтобы визуально не путалась с нулём |
t | Троичный | 11t = 4 |
Каноническая форма:
vector //x// //y// //z//...
Краткая форма:
(//x// //y// //z//... )
Операции группировки (скобки): (…), […], {…}. В начале группировки в качестве левого операнда даёт «пустышку». По завершению результат передаёт справа к тому, что было до скобок.
Примеры:
() — пустышка. Так её можно передать справа.
Выборка элементов:
//a// @ //i//
Где:
Выборка подмассива
//a// select //ia//
Где:
Следует отличать операцию выборки элемента от выборки подмассива. Выборка подмассива возвращает массив, даже если выбран один элемент.
Пример:
Концепция представлений заключается в том, что одна и та же информационная сущность может быть представлена различным образом, таким образом различным образом обладать различными свойствами.
Так натуральное число может быть представлено в виде массива битов. Или в виде строки цифр.
При этом, в отличие от концепции интерфейсов различие в поведении может затрагивать отдни и те же методы, а в отличие от преобразования — преобразования как такового не происходит.
Как правило у любого типа данных существует так называемое «сырое» представление, полностью соответствующее тому, как эти данные представлены в оперативной памяти компьютера. Таким образом, концепция представлений даёт логичный механизм доступа для системных низкоуровневых операций — копирования, слежения за изменениями, выделения и освобождения памяти, сохранения на диск и загрузки и т. д.
x-u-v-w-... (chain u v w ...)
Пример:
(chain *2) : double 2 double => 4
y x swap x y
Примеры:
u v w |X| x y (cross v u w) v / u \ / x (fork v u)
Примеры: