Paradoxal

Синтаксис

Основные единицы синтексиса

Программа состоит из токенов и разделителей.

К разделителям относятся символы и последовательности символов, не преобразуемые в токены. Это пробел, управляющие символы (перевод строки, табуляция и т. п.), не входящие в состав более сложных токенов. Разделители никак не влияют на смысл программы, кроме как разделяют пары токены, которые в отсутствие разделителей могут быть проинтерпретированы как один.

Токены являются минимальными неделимымми синтаксическими единицами языка. Токены могут быть символьными, именными и ограниченными.

К символьным относятся токены, представляющие собой отдельные символы, представленные оперделённой фиксированной последовательностью кодов, они самоограничены — символьный токен не может быть проинтерпретирован как часть другого символьного или именного токена. Примеры: +, *, (.

К именным относятся токены, состоящие из произвольных символов, не принадлежащих к символьным токенам или ограничителям ограниченных токенов, и ограниченные разделителями или символьными и ограниченными токенами. Примеры: Abcd, 010b, ~12, sin, lit?.

К ограниченным относятся токены, состоящие из прозвольных символов (не являющихся ограничителями), ограниченных сначала и конца символами ограничителями. Примеры: "hello", # comment(lf)

Числа

Представление чисел в программе включает следующие части:

  1. мантиссу
  2. порядок
  3. показатель формата

Обязательной является только мантисса.

Мантисса

Для представления мантиссы могут использоваться следующие символы:

  • Цифры 09
  • Буквы в качестве дополнительных цифр.
  • Символ изменения знака: ~
  • Разделитель целой и дробной части, а также указатель периодической дроби: .

По умолчанию, если не стоит показатель формата, число представлено в десятичной системе.

Символ изменения знака указывает, что цифры слева и справа имеют проивоположный знак. Причём слева, до первого символа цифры будут иметь положительное значение. После (первого) знака — отрицательное. Таким образом наиболее простое представление отрицательных знаков подобно традиционному, только вместо унарного минуса стоит тильда: ~1.5 — минус полтора. Однако такая система позволяет задавть также числа в логарифмической форме (~1~.25 = -1 + 0.25) и в двоичной форме с дополнением до двух: (~1~000b = -8).

Дробная и периодическая дробная части указываются точкой. Доступные формы следующие:

  • i — целое число: 1;
  • i.f — число с целой и дробной частью: 1.25;
  • i.f.p — число с целой, дробной и дробной периодической частью: 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

Концепции

Система сущностей

  1. data (данные)
    1. ordered — упорядоченные типы
      1. number — числа
        1. real — действительные числа
        2. integer — целые числа
    2. finite — конечные типы (перечисления)
      1. bit — логическая переменная
    3. array — массивы
      1. indexed — индексные массивы (многомерные в том числе)
        1. vector — вектор, одномерный индексный массив, вариант записи для 1 indexed
      2. associated — ассоциативные массивы
    4. complex — комплексные числа
  2. token (т. н. ключ)
    1. () — пустышка

Массивы

Определение

Создание вектора

Каноническая форма:

vector //x// //y// //z//...

Краткая форма:

(//x// //y// //z//... )

Синтаксические элементы

Операции группировки (скобки): (…), […], {…}. В начале группировки в качестве левого операнда даёт «пустышку». По завершению результат передаёт справа к тому, что было до скобок.

Примеры:

() — пустышка. Так её можно передать справа.

Работа с массивами и элементами

Выборка элементов:

//a// @ //i//

Где:

  • a — массив
  • @ — оператор индекса
  • i — индекс (целое число, либо вектор)

Выборка подмассива

//a// select //ia//

Где:

  • a — массив
  • select — оператор выборки
  • ia — массив индексов (ключей): выбираются элементы с ключами, равными значениям, получают ключи (индексы) по ключам массива индексов

Следует отличать операцию выборки элемента от выборки подмассива. Выборка подмассива возвращает массив, даже если выбран один элемент.

Свойства массивов и прочие операции над ними

  • count — количество элементов в массиве.
  • order — порядок элементов в массиве в виде индексного массива (если значения упорядочиваемы)
  • each — произвести операцию поэлементно
  • filter — отфильтровать элементы булевой функцией и сделать отображение
  • decimate — проредить (отличается от фильтра тем, что элементы перенумеровываются)

Пример:

  • (3 4 1) order ⇒ (2 0 1)
  • Десятикратная децимация массива (вариант с decimate)

Представления

Концепция представлений заключается в том, что одна и та же информационная сущность может быть представлена различным образом, таким образом различным образом обладать различными свойствами.

Так натуральное число может быть представлено в виде массива битов. Или в виде строки цифр.

При этом, в отличие от концепции интерфейсов различие в поведении может затрагивать отдни и те же методы, а в отличие от преобразования — преобразования как такового не происходит.

Как правило у любого типа данных существует так называемое «сырое» представление, полностью соответствующее тому, как эти данные представлены в оперативной памяти компьютера. Таким образом, концепция представлений даёт логичный механизм доступа для системных низкоуровневых операций — копирования, слежения за изменениями, выделения и освобождения памяти, сохранения на диск и загрузки и т. д.

Операции над операциями

Цепи

x-u-v-w-...
(chain u v w ...)

Пример:

(chain *2) : double
2 double
=> 4

Перестановка

y x
swap x y

Примеры:

  • swap sin 3
  • swap 2(swap-3) ⇒ 1
  • 2`-3 ⇒ 1

Вилки

 u
v w
|X|
x y
(cross v u w)
 v
/ u
\ /
 x
(fork v u)

Примеры:

  • a(cross(+*)-)b ⇒ (a+b)*(a-b)
Специальные операции для использования в вилках
  • ; — отбрасывание левого операнда
  • `; — отбрасывание правого операнда

Свойства операций и действия над ними

  • invert — получение обратной операции
  • fold — многократное применение операции

Числа и операции над ними

Бинарные операции

+
сложение
-
вычитание
*
умножение
/
деление
<
меньше
=
равно
>
больше

Префиксные унарные операции

-
изменение знака
/
обращение
cherdak/paradoxal.txt · Последние изменения: 2011/11/04 23:08 — vovanium
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution 3.0 Unported