01 · Огляд #overview
Функція Що робить Аргумент Коли обчислюється
/sum Сума всіх елементів /shelf parser
/sqrt Квадратний корінь, дробове обрізається число або змінна parser
/median Медіана shelf /shelf parser
/min Мінімальний елемент shelf /shelf parser
/max Максимальний елемент shelf /shelf parser
Нульова вартість: Всі функції обчислюються парсером і компілюються у числову константу.
Це не виклик функції — це число, вбудоване в бінарник на етапі компіляції.
02 · /sum #sum
/sum(shelf)
Сума всіх елементів shelf
Розгортається у число в парсері · у IR потрапляє як константа
parser

Приймає /shelf змінну і повертає суму всіх її елементів.
Обчислення — на етапі парсингу. У скомпільованому коді залишається просте число.

✓ index.html example
hello.terra
app (/shelf, /intbyte, /const) primes = (2, 3, 5, 7, 11)

::start::
/display(/sum(primes))   ! 2+3+5+7+11 = 28 → константа в парсері
output28
У LLVM IR: store i8 28 — ніяких обчислень в runtime.
03 · /sqrt #sqrt
/sqrt(x)
Квадратний корінь · integer truncation
Дробова частина відкидається · результат — ціле число
parser

Обчислює квадратний корінь. Дробова частина відкидається — не округляється.
Обчислення на етапі парсингу.

✓ приклад
приклад
app (/intbyte, /const) r1 = /sqrt(16)   ! = 4
app (/intbyte, /const) r2 = /sqrt(10)   ! = 3 (не 3.16)
app (/intbyte, /const) r3 = /sqrt(2)    ! = 1 (не 1.41)
Truncation, не округлення: /sqrt(8) = 2, не 3. Дробова частина завжди відкидається вниз.
04 · /median #median
/median(shelf)
Медіана shelf
Для парної кількості — середнє двох центральних · integer truncation
parser

Для непарної кількості — центральний елемент відсортованого shelf.
Для парної — середнє двох центральних з integer truncation.

✓ приклад
приклад
app (/shelf, /intbyte, /const) vals = (3, 1, 7, 4, 9)
! відсортовано: 1, 3, 4, 7, 9 → медіана = 4

::start::
/display(/median(vals))
output4
05 · /min · /max #minmax
Увага — не плутати з &min / &max: /min і /max — функції над /shelf, повертають значення елемента.
&min і &max — модифікатори операцій, задають межу результату. → Оператори
/min(shelf)
Мінімальний елемент shelf
Константа в парсері
parser
приклад
app (/shelf, /intbyte, /const) data = (10, 3, 77, 42)

::start::
/display(/min(data))   ! = 3
output3
/max(shelf)
Максимальний елемент shelf
Константа в парсері
parser
приклад
app (/shelf, /intbyte, /const) data = (10, 3, 77, 42)

::start::
/display(/max(data))   ! = 77
output77