Seznam operátorů GEL
Předcházející | Kapitola 5. Základy jazyka GEL | Další

## Seznam operátorů GEL

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.

### Poznámka

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.

### Poznámka

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)

### Poznámka

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.

Předcházející | Nahoru | Další
Modulární aritmetika | Domů | Kapitola 6. Programování s jazykem GEL