Синтаксис · Terra v0.1
∑ Математичні функції
Вбудовані функції для обчислень над числами і shelf.
Більшість обробляється парсером до LLVM IR — у скомпільованому бінарнику вони відсутні.
01 · Огляд
#overview
| Функція | Що робить | Аргумент | Коли обчислюється |
|---|---|---|---|
| /sum | Сума всіх елементів | /shelf |
parser |
| /sqrt | Квадратний корінь, дробове обрізається | число або змінна | parser |
| /median | Медіана shelf | /shelf |
parser |
| /min | Мінімальний елемент shelf | /shelf |
parser |
| /max | Максимальний елемент shelf | /shelf |
parser |
Нульова вартість:
Всі функції обчислюються парсером і компілюються у числову константу.
Це не виклик функції — це число, вбудоване в бінарник на етапі компіляції.
Це не виклик функції — це число, вбудоване в бінарник на етапі компіляції.
02 · /sum
#sum
/sum(shelf)
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
03 · /sqrt
#sqrt
/sqrt(x)
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)
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)
parser
приклад
app (/shelf, /intbyte, /const) data = (10, 3, 77, 42) ::start:: /display(/min(data)) ! = 3
output3
/max(shelf)
parser
приклад
app (/shelf, /intbyte, /const) data = (10, 3, 77, 42) ::start:: /display(/max(data)) ! = 77
output77
store i8 28— ніяких обчислень в runtime.