Vše v jazyce GEL jsou ve skutečnosti jen výrazy. Výrazy jsou dohromady řetězeny pomocí různých operátorů. Jak jste již viděli, i oddělovač je ve skutečnosti jen binární operátor jazyka. Zde je seznam operátorů jazyka GEL.
a;b
Oddělovač, který vyhodnocuje jak a
, tak b
, ale vrací výsledek pouze z b
.
a=b
Operátor přiřazení.
a:=b
Operátor přiřazení. Přiřadí b
do a
(a
musí být platná l-hodnota). Liší se od =
, protože se nikdy nepřevádí na ==
.
|a|
Absolutní hodnota. V případě, že výraz je komplexní číslo, je vrácen modul (absolutní hodnota komplexního čísla, někdy také nazýván norma), což je vzdálenost od počátku. Například: |3 * e^(1i*pi)|
vrátí 3.
Více informací najdete v encyklopediích Mathworld (text je v angličtině) a Wikipedia.
a^b
Umocnění, umocní a
na b
-tou.
a.^b
Umocňování prvek po prvku. Umocní každý prvek matice a
na b
-tou. Nebo, když je b
matice stejné velikosti jako a
, umocňuje se prvek po prvku. Pokud je a
číslo a b
je matice, pak se vytvoří matice stejné velikosti jako b
s a
umocněným na všechny různé mocnitele v b
.
a+b
Sčítání. Sečte dvě čísla, matice, funkce nebo řetězce. Pokud přičtete řetězec k čemukoliv, výsledkem bude vždy řetězec. Pokud je jeden operand čtvercová matice a druhý číslo, je číslo vynásobeno jednotkovou maticí.
a-b
Odčítání. Odečte dvě čísla, matice nebo funkce.
a*b
Násobení. Jedná se o normální násobení matic.
a.*b
Násobení prvek po prvku v situaci, kdy a
a b
jsou matice.
a/b
Dělení. Pokud jsou a
a b
čísla, jedná se o běžné dělení. Pokud to jsou matice, odpovídá to a*b^-1
.
a./b
Dělení prvek po prvku. Pro čísla je to stejné jako a/b
, ale u matic to funguje prvek po prvku.
a\b
Zpětné dělení. Je to to stejné, jako b/a
.
a.\b
Zpětné dělení prvků prvky.
a%b
Operátor zbytku. Nepřepíná do režimu modulární aritmetiky, ale jen prostě vrátí zbytek celočíselného dělení a/b
.
a.%b
Operátor zbytku dělení prvků prvky. Vrací zbytky po dělení celočíselných prvků celočíselnými prvky a./b
.
a mod b
Operátor modulární aritmetiky. Výraz a
je vyhodnocen modulární aritmetikou vůči b
. Viz „Modulární aritmetika“. Některé funkce a operátory se chovají odlišně při modulární aritmetice s celými čísly.
a!
Operátor faktoriálu. Je to jako 1*…*(n-2)*(n-1)*n
.
a!!
Operátor dvojitého faktoriálu. Je to jako 1*…*(n-4)*(n-2)*n
.
a==b
Operátor rovnosti, vrací true
(pravda) nebo false
(nepravda) podle toho, zda a
je b
rovno nebo není rovno.
a!=b
Operátor nerovnosti, vrací true
(pravda) v případě, že a
se nerovná b
, jinak vrací false
(nepravda).
a<>b
Alternativní operátor nerovnosti, vrací true
(pravda) v případě, že a
se nerovná b
, jinak vrací false
(nepravda).
a<=b
Operátor menší než nebo rovno, vrací true
(pravda) v případě, že a
je menší než nebo se rovná b
, jinak vrací false
(nepravda). Je možné řetězit ve stylu a <= b <= c
(a může se při tom kombinovat s operátorem menší než).
a>=b
Operátor větší než nebo rovno, vrací true
(pravda) v případě, že a
je větší než nebo se rovná b
, jinak vrací false
(nepravda). Je možné řetězit ve stylu a >= b >= c
(a může se při tom kombinovat s operátorem větší než).
a<=b
Operátor menší než, vrací true
(pravda) v případě, že a
je menší než b
, jinak vrací false
(nepravda). Je možné řetězit ve stylu a < b < c
(a může se při tom kombinovat s operátorem menší než nebo rovno).
a>=b
Operátor větší než, vrací true
(pravda) v případě, že a
je větší než b
, jinak vrací false
(nepravda). Je možné řetězit ve stylu a > b > c
(a může se při tom kombinovat s operátorem větší než nebo rovno).
a<=>b
Operátor porovnání. V případě, že a
je rovno b
, vrací 0, pokud je a
menší než b
vrací -1 a pokud je a
větší než b
, vrací 1.
a and b
Logické A (AND). Vrací pravda, když a
i b
jsou pravda, ve všech ostatních případech nepravda. Pokud jsou předána čísla, je se všemi nenulovými zacházeno jako s pravdivostní hodnotou pravda.
a or b
Logické NEBO (OR). Vrací pravda, když je a
nebo b
(nebo oboje) pravda, jinak vrací nepravda. Pokud jsou předána čísla, je se všemi nenulovými zacházeno jako s pravdivostní hodnotou pravda.
a xor b
Logické vylučovací NEBO (XOR). Vrací pravda, když právě a
nebo b
je pravda, ve všech ostatních případech vrací nepravda. Pokud jsou předána čísla, je se všemi nenulovými zacházeno jako s pravdivostní hodnotou pravda.
not a
Logická negace (NOT). Vrací logickou negaci a
.
-a
Operátor negace. Vrací opačné číslo nebo matici (u matice pracuje prvek po prvku).
&a
Reference proměnné (pro předání odkazu na proměnnou). Viz „Reference“.
*a
Dereference proměnné (pro přístup k odkazované proměnné). Viz „Reference“.
a'
Transponovat matici komplexně sdruženou (Hermiteovsky sdružená matice). Tj. řádky a sloupce se prohodí a vezmou se komplexně sdružená čísla ke všem prvkům. To znamená, že když prvek i,j matice a
je x+iy, pak prvek j,i matice a'
je x-iy.
a.'
Transponovat matici (bez komplexního sdružení). To znamená, že prvek i,j matice a
se stane prvkem j,i matice a.'
.
a@(b,c)
Získat prvek matice v řádku b
a sloupci c
. Pokud jsou b
, c
vektory, získají se odpovídající řádky, sloupce nebo podmatice.
a@(b,)
Získat řádek matice (nebo více řádků, pokud je b
vektor).
a@(b,:)
Stejné jako předchozí.
a@(,c)
Získat sloupec matice (nebo sloupce, pokud je c
vektor).
a@(:,c)
Stejné jako předchozí.
a@(b)
Získat prvek z matice, s kterou se zachází jako s vektorem. Matice se prochází řádek pro řádku.
a:b
Sestavit vektor od a
do b
(nebo zadané části řádku, sloupce pro operátor @
). Například pro získání řádků 2 až 4 z matice A
byste mohli použít
A@(2:4,)
, kdy 2:4
vrátí vektor [2,3,4]
.
a:b:c
Sestavit vektor od a
do c
s krokem b
. Tj. například
genius> 1:2:9 = `[1, 3, 5, 7, 9]
Když jsou použita desetinná čísla, například 1.0:0.4:3.0
, je výstupem to, co očekáváte, přestože se k 1,0 pětkrát přidá 0,4, je to jen o něco více než 3,0 z důvodu, jakým jsou desetinná čísla uchována ve dvojkové soustavě (není to přesně 0,4, ale uložené číslo je obvykle o trochu větší). Způsob, jakým je to zpracováváno, je stejný jako u cyklu a sčítacích a násobících smyček. Pokud je konec v rámci 2^-20
násobku velikosti kroku koncového bodu, je koncový bod použit a předpokládá se, že nastaly chyby zaokrouhlení. To sice není perfektní, ale řeší to většinu případů. Tato kontrola se provádí až ve verzi 1.0.18 a novějších, takže provádění vašeho kódu může být ve starších verzích odlišné. Pokud chcete této záležitosti předejít, používejte opravdová racionální čísla, případně použijte funkci float
, když si přejete na konci dostat desetinné číslo. Například 1:2/5:3
funguje správně a float(1:2/5:3)
vám poskytne desetinné číslo a přitom to bude nepatrně přesnější než 1.0:0.4:3.0
.
(a)i
Udělat z a
imaginární číslo (vynásobit a
imaginární hodnotou i
). Všimněte si, že normálně se i
zapisuje jako 1i
. Takže předchozí je vlastně ekvivalentní k
(a)*1i
`a
Uvozovat identifikátor, kterýžto nebude vyhodnocen. Nebo uvozovat matici, takže nebude rozšířena.
a swapwith b
Přehodit hodnotu proměnné a
s hodnotou proměnné b
. V současnosti nepracuje s částmi prvků matice. Vrací null
. Dostupné od verze 1.0.13.
increment a
Zvýšit hodnotu proměnné a
o 1. V případě, že a
je matice, je o 1 zvýšen každý prvek. Dělá to vlastně to stejné co a=a+1
, akorát o něco rychleji. Vrací null
. Dostupné od verze 1.0.13.
increment a by b
Zvýšit hodnotu proměnné a
o b
. V případě, že a
je matice, je o zvýšen každý prvek. Dělá to vlastně to stejné co a=a+b
, akorát o něco rychleji. Vrací null
. Dostupné od verze 1.0.13.
Operátor @() dává operátoru : více možností. S ním můžete určovat části matice. Takže a@(2:4,6) jsou řádky 2,3,4 sloupce 6. Nebo a@(,1:2) vám dá první dva sloupce matice. Do operátoru @() můžete i přiřazovat, stačí když je pravou hodnotou matice o stejném rozměru jako určená oblast nebo je to jiný typ hodnoty.
Porovnávací operátory (vyjma operátoru <=>, který se chová normálně) nejsou striktně binární operátory, mohou být fakticky seskupovány běžným matematickým způsobem, např.: (1<x<=y<5) je platný pravdivostní výraz a znamená přesně to, co by měl, tj. (1<x a x≤y a y<5)
Unární operátor mínus funguje různými způsoby v závislosti na tom, kde se vyskytuje. Když se objeví před číslem, váže se přímo k němu. Když se objeví před výrazem, má slabší vazbu než mocnina a faktoriál. Například -1^k
je ve skutečnosti (-1)^k
, ale -neco(1)^k
je ve skutečnosti -(neco(1)^k)
. Takže věnujte pozornost tomu, jak je používáte a pokud máte pochybnosti, raději přidejte závorky.