общи операции
-------------
x === y                  сравняване за равенство на какви да е стойности; успява, ако x и y са еднотипни и при това са
                         или равни прости стойности, или една и съща съставна стойност

x ~=== y                 обратното на === сравнение

x := y                   присвояване

x :=: y                  размяна на стойностите на x и y; стойността е тази на x след размяната

x <- y                   условно присвояване

x <-> y                  условна размяна

\ x                      x, ако стойността му не е &null, в противен случай неуспех; резултатът е променлива, ако x е такава

/ x                      x, ако стойността му е &null, в противен случай неуспех; резултатът е променлива, ако x е такава

type(x)                  низ, представящ типа на x

copy(x)                  ако x е съставна стойност – равна на нея друга стойност, иначе самото x



избор
-----
if e₀ then e₁ [ else e₂ ]                 case e of {
                                            e₀₁ : e₁
                                            ...
                                          [ default : e₀₀ ]
                                          }


у-връзки
--------
e₁ & e₂                  „и“ по успех

e₁ | e₂                  „или“ по успех

not e                    обръщане на успех/неуспех (&null при успех)


генератори
----------
e₁ to e₂ [ by e₃ ]       аритметична прогресия с начало e₁, гранична стойност e₂ и стъпка e₃ (подразбира се 1)

seq([i[,j]])             безкрайна аритметична прогресия с начало i и стъпка j; i и j са цели числа, подразбира се 1 за всяко
                                                      
| e                      поражда докато e успява
                                                          
e \ i                    поражда ≤ i стойности
                                                          
! e                      поражда ел-те на стр-на стойност


повтаряне
---------
repeat e                 „винаги“

while e₀ [ do e₁ ]       докато e₀ е успешно

until e₀ [ do e₁ ]       докато e₀ е неуспешно

every g [ do e ]         за всяка стойност от g

next                     следващо повтаряне на текущия repeat, while, until или every

break [ e ]              напускане на текущия repeat, while, until или every; e може да е вкл. next, break и т.н.


процедури и съпрограми
----------------------
procedure име(параметри) определяне; процедурите не могат да се влагат и всички са глобални
  ...
end

x(а₁,а₂,…)               ако x е процедура или функция, повикване с посочените аргументи; x може да е име или другояче
                         получена процедурна стойност; ако x е цяло число, пресмята се изразът с този пореден номер;
                         прилага се и броенето назад; ако изразът е променлива, и резултатът е такъв

x ! y                    ако x е процедура или функция, повикване с аргументи от списъка y; x може да е име или другояче
                         получена процедурна стойност; ако x е цяло число, дава се стойността на члена на списъка y с този
                         пореден номер; прилага се и броенето назад; ако изразът е променлива, и резултатът е такъв


return [ e ]             завършва с успех (и стойност)

fail                     подразбира се при завършване на процедура!

suspend [x [ do … ]]     съпрограмно връщане на управлението към повикващия, предавайки поредната стойност на генератора x;
                         при възобновяване на изпълнението на текущия процедурен екземпляр частта след do се пресмята преди
                         пресмятането на x за пораждане на следваща стойност; за x се подразбира &null

proc(s[,i])              процедурата, функцията или операцията с име s; i = 1, 2, 3 избира съответно едноместна, двуместна
                         и триместна операция, а i = 0 – вградената функция с име s, дори ако съответното глобално име е
                         получило друга стойност; подразбира се 1

args(p)                  броят параметри на процедурата p; ако той е променлив, дава се отрицателна стойност


списъци (масиви, опашки, стекове, декове)
-----------------------------------------
list([n[,x]])            списък с n члена, равни на x; подразбира се n = 0 и x = &null

[x,y,…]                  списък от посочените членове

x[i]                     член

i ! x                    член

x[i:j]                   изрезка
x[i+:j]                  s[i:i+j]
x[i-:j]                  s[i:i-j]

* x                      размер

? x                      случайно избран член

! x                      изброява x

x ||| y                  слепване

push(x)                  добавяне към началото

get(x) ≡ pop(x)          извличане от началото

put(x)                   добавяне към края

pull(x)                  извличане от края

sort(x[,i])              подреждане, вкл. на разнотипни стойности, по стойността на полетата с индекс i на членовете;
                         подразбира се i = 1


низове
------
"…"                      низ с посоченото съдържание

s[i]                     член

i ! s                    член

s[i:j]                   изрезка
s[i+:j]                  s[i:i+j]
s[i-:j]                  s[i:i-j]

* s                      размер

? s                      случайно избран член

! s                      изброява s

x || y                   слепване

<< <<= >>= >> == ~==     лексикографско сравняване

left(x,n[,y])            низ с дължина n, в който x е отляво, а след него е допълнено отдясно наляво с y

right(x,n[,y])           низ с дължина n, в който x е отдясно, а пред него е допълнено отляво надясно с y

center(x,n[,y])          низ с дължина n, в който x е в средата или малко вляво, а пред и след него е допълнено с y
                         съответно както при right и left

char(n)                  низ с дължина 1 по зададен ASCII код n

ord(s)                   ASCII кода на литерата – единствен член на низа s

repl(s,n)                низ от n повторения на s

reverse(s)               низът, обратен на s

map(s[,s₁,s₂])           низ, получен от s чрез замяна на всяка литера от cset(s)**cset(s₁) със съответната ѝ
                         по място в s₂;  подразбира се замяна на главни с малки букви от латиницата

find(s₁,s₂[,i,j])        редицата от индекси в s₂, които са начало на подниз в рамките на s₂[i:j], равен на s₁

match(s₁,s₂[,i,j])       индексът в s₂ след префикса на s₂[i:j], равен на s₁

any(cs,s[,i,j])          индекс в s на първата литера от множеството cs в рамките на s[i:j];
                         неуспех, ако s[i] не е от cs

many(cs,s[,i,j])         индекс в s на първата литера след тези от множеството cs в рамките на s[i:j];
                         неуспех, ако s[i] не е от cs

upto(cs,s[,i,j])         редицата от индекси в s в рамките на s[i:j], която предхожда
                         първата литера от cs, намираща се в същия отрязък

tab(i)                   дава &subject[&pos:i] и изпълнява &pos := i

move(i)                  дава &subject[&pos:&pos+i] и изпълнява &pos +:= i

trim(s,cs)               низ от съдържанието на s без остатъчните му членове, които са членове и на множеството cs

bal(cs₁,cs₂,cs₃,s[,i,j]) редица от индекси в s на литери в рамките на s[i:j], които са от cs₁ и след които литерите в s[i:j]
                         са уравновесени по отношение на съответствието между cs₂ и cs₃; подразбира се cs₁ = &cset, cs₂ = '('
                         и cs₃ = ')'; употребява се основно за намиране на съответна скоба, включително при влагане

=s                       tab(match(s))


сканиране
---------
s ? x                    пресмятане на x в контекста на низа s – служи за претърсване на низ; когато са част от израза
                         x в операция ?, за множество вградени функции върху низове основният аргумент низ се подразбира
                         да е s; при завършване на операция ?, вложена в друга такава, се възстановяват стойностите на
                         &subject и &pos

s ?:= x                  като s ? x, като накрая резултатът се присвоява на s

&subject                 променлива със стойност претърсваният при пресмятане на израз s?x низ

&pos                     променлива със стойност текущата позиция в &subject при пресмятане на израз s?x
                         промените на &pos под действието на разните функции се отменят при неуспех – използва
                         се за възвратно програмиране

pos(i)                   стойността на &pos, ако |i| = &pos (в противен случай неуспех)


таблици
-------
table([x])               таблица с подразбираща се стойност x (за която се подразбира &null)

t[k]                     член

* t                      размер

? t                      случайно избран член

! t                      изброява t

member(t,k)              k при успех (t има член с ключ k)

insert(t,k,x)            добавя към t стойност x с ключ k, дава t

delete(t,x)              премахва x, дава t

key(t)                   поражда ключовете от t

sort(x[,i])              списък от двойките (списъци от по два члена) ключ-стойност на таблицата x,
                         подредени по ключа (при i = 1) или по стойността (при i = 2); подразбира се i = 1


множества
---------
set(x)                   множество от членовете на списъка x

x ** y                   сечение

x ++ y                   обединение

x -- y                   разлика

* x                      размер

? x                      случайно избран член

! x                      изброява x

member(s,x)              x при успех (x ∈ s)

insert(s,x)              добавя x, дава s

delete(s,x)              премахва x, дава s

sort(x[,i])              списък от членовете на множеството x, подредени, вкл. при разнотипни стойности,
                         по стойността на полетата с индекс i на членовете; подразбира се i = 1


литерни множества
-----------------
cset(x)                  литерно множество от (литерите на) x

'…'                      литерно множество от посочени членове

* x                      размер

? x                      случайно избран член

x ** y                   сечение

x ++ y                   обединение

x -- y                   разлика

~ x                      допълнение 

&cset                    всички литери

&ascii                   128-те литери от множеството ASCII

&digits                  десетте цифри

&letters                 52-те букви от латиницата

&lcase                   малките букви от латиницата

&ucase                   главните букви от латиницата


смеси
-----
record x(y₁,y₂,…)        определение на смес („запис“) с име x и имена на полета изброените в скоби; допуска се само глобално

x(a₁,a₂,…)               образуване на стойност смес от смесения тип с име x и стойности на полетата, както са изброени

x.y                      цитиране на полето y на сместа x

x["y"]                   същото като x.y

x[i]                     цитиране на полето с пореден номер i (цяло число с право или обратно броене)

* x                      брой на полетата на x

? x                      стойността на случайно избрано поле на x

! x                      изброява стойностите на полетата на x


съизрази
--------
create x                 съизраз от израза x

@ x                      резултатът от пресмятането на съизраза x

y @ x                    резултатът от пресмятането на съизраза x с аргумент y (@x от по-горе е съкращение на &null @ x)

^ x                      подновен съизраз от x

* x                      брой породени стойности

&current                 текущо пресмятаният съизраз

&source                  съизразът, повикал текущия съизраз; например @&source е като suspend в процедура

&main                    съизраз, пресмятащ функцията main – все едно, че е породен с @(create main())


вход и изход
------------
read([f])                ред текст, ако има такъв, от файла f; подразбира се &input – стандартният вход

reads([f[,n]])           низ от n или колкото остават литери от файла f; край на ред не се различава от останалите литери;
                         подразбира се f = &input, n = 1

write(а₁,а₂,…)           записване в един или повече файлове с поставяне на литерата край на ред накрая или при преминаване
                         към друг файл; по начало се записва в &output – стандартния изход; ако текущият аргумент е низ,
                         записва се в текущия файл, а ако е файл, той се избира за такъв, в който се записва по-нататък

writes(а₁,а₂,…)          като write(а₁,а₂,…), но без добавяне на литерата край на ред