Matematika a logika



Většina matematiky a logiky v Redu je běžná až na pořadí výpočtu. Níže uvádím výčet operátorů (slov), používaných pro výpočty spolu s případnými poznámkami.

Základy:

Následující skupinu tvoří jak prefixové (např. add) tak infixové  (např. operátor "+") funkce . Přijímají hodnoty typu number!, char!, pair!, tuple! nebo vector! jako argumenty.

Funkcionální (prefixové) operátory se uvádějí před svými operandy (např.:  add 3 4).

action! add  or   op! +

action! subtract  or  op!  -

action! multiply  or  op! *

action! divide  or op! /

action! power  or op! **

action! absolute

Vyhodnotí výraz a vrátí absolutní hodnotu, to jest kladné číslo.

action! negate

Změní signum hodnoty, to jest: positive <=> negative

float! pi  (konstanta typu float!)

3,141592...

action! random

Vrací náhodnou hodnotu téhož typu jako argument.

Je-li argumentem celé číslu, vrací integer mezi 1 (inclusive) a argumentem (inclusive).

Je-li argumentem desetinné číslo, vrací float mezi 0 (inclusive) a argumentem (inclusive).

Je-li argumentem řada, přeskupí elementy.

>> random 10
== 2

>> random 33x33
== 13x23

>> random 1
== 1

>> random 1.0
== 0.07588539741741744

>> random "abcde"
== "cedab"

>> random 10:20:05
== 8:02:32.5867693

Upřesnění (refinements):

/seed - Restartovat a randomizovat. Patrně lze použít v situaci, kdy je funkce random volána v programu opakovaně. V tom případě nemusí být výsledek zcela náhodný, pokud se nepoužije random/seed.

/secure - TBD: Vrací kryptograficky zajištěné náhodné číslo.

/only - Vybrat náhodnou hodnotu z řady.

>> random/only ["fly" "bee" "ant" "owl" "dog"]
== "fly"

>> random/only "aeiou"
== #"o"

action! round

Vrací nejbližší celé číslo. Poloviny (např. 0,5) se zaokrouhlují směrem od nuly.

>> round 2.3
== 2.0

>> round 2.5
== 3.0

>> round -2.3
== -2.0

>> round -2.5
== -3.0

Refinements:

/to - pro určení "přesnosti" zaokrouhlení:

>> round/to 6.8343278 0.1
== 6.8

>> round/to 6.8343278 0.01
== 6.83

>> round/to 6.8343278 0.001
== 6.834

/even - Poloviny (např. 0.5) se zaokrouhlují směrem k sudému číslu.

>> round/even 2.5
== 2.0                         ;not 3

/down - Odsekne desetinnou část ale číslo zachová jako float!.

>> round/down 3.9876
== 3.0

>> round/down -3.876
== -3.0

/half-down - Poloviny zaokrouhlovat směrem k nule, nikoli od nuly.

>> round/half-down 2.5
== 2.0

>> round/half-down -2.5
== -2.0

/floor - Zaokrouhlovat v negativním směru.

>> round/floor 3.8
== 3.0

>> round/floor -3.8
== -4.0

/ceiling - Zaokrouhlovat v pozitivním směru.

>> round/ceiling 2.2
== 3.0

>> round/ceiling -2.8
== -2.0

/half-ceiling - Zaokrouhluje poloviny v pozitivním směru.

>> round/half-ceiling 2.5
== 3.0

>> round/half-ceiling -2.5
== -2.0

native! square-root

Příjímá libovolnou hodnotu typu number! jako argument.


Remainders (zbytky) etc.:

action! remainder nebo  op! //

Přijímá hodnotu typu number! char! pair! tuple! a vector! jako argument. Vrací zbytek dělení prvního čísla druhým.

>> remainder 15 6
== 3

>> remainder -15 6
== -3

>> remainder 4.67 2
== 0.67

>> 17 // 5
== 2

>> 4.8 // 2.2
== 0.3999999999999995

op! %

Vrací zbytek po dělení jedné hodnoty druhou.

function! modulo

Vrací pozitivní zbytek (modulus) po dělení prvního argumentu druhým. Je-li některé  z čísel (či obě) záporné, uvedené jednoduché pravidlo neplatí a je to mnohem složitější - viz Vikipedia: Modulo operation.


>> modulo 9 4
== 1

>> modulo -15 6      ; bylo to však složitější
== 3

>> modulo -15 -6     ; bylo to však složitější
== 3

>> modulo -15 7           ; neboť to je složitější
== 6

>> modulo -15 -7           ; neboť to je složitější
== 6


Logaritmy :

function! exp

Druhá mocnina přirozeného čísla e.

native! log-10

Pro daný argument vraci logaritmus se základem 10 .

native! log-2

Pro daný argument vraci logaritmus se základem 2.

native! log-e

Pro daný argument vraci logaritmus se základem e.


Trigonometrie:

Všechny trigonometrické funkce s dlouhými názvy  (arccosine, cosine etc) přijímají argumenty ve stupních, umožňují ale použití argumentu v radiánech s upřesněním  /radians. Verze s krátkými názvy (acos, cos etc.)  přijímají úhly v radiánech.

function! acos  či  native! arccosine

function! asin  či native! arcsine

function! atan  či  native! arctangent

Vrací trigonometrický arctangent.

function! atan2  či  native! arctangent2

Vrací úhel spojnice bodu 0,0 a x,y v radiánech, měřený proti směru hodinových ručiček od kladné osy jednotkové kružnice. Vracené hodnoty se pohybují mezi -pi a +pi.

function! cos  či  native! cosine

function! sin  či  native! sine

function! tan  či  native! tangent


Extras:

native! max

Vrátí větší  ze dvou argumentů typu scalar! nebo series!

>> max 8 12
== 12

>> max "abd" "abcd"
== "abd"

Při porovnávání řetězců (což jsou series!) nebo bloků je postupně porovnáván každý element. Při výskytu první neshody porovnávání končí a jako větší je vybrán blok (string) s větší hodnotou neshodného elementu.

>> max [1 2 3] [3 2 1]     ; porovnávání skončilo hned u prvního elementu  
== [3 2 1]

>> max [1 2 99] [3 2 1]    ; rovněž tak
== [3 2 1]

Při porovnání hodnot typu pair!, vrací větší z každého elementu:

>> max 12x6 7x34
== 12x34

native! min

Vrací menší ze dvou argumentů. Poznámka o max je zde rovněž revelantní.

action! odd?

Vrací true je-li argument typu integer! lichý a false je-li sudý.

action! even?

Vrací true  je-li argument typu integer! sudý a false  je-li lichý.

native! positive?

Vrací true je-li argument větší než nula a false je-li menší než 1.

native! negative?

Vrací true je-li argument menší než 1 a false je-li větší než 0.

native! zero?

Vrací true je-li argument roven nule.

function! math

Vyhodnotí hodnotu typu block! s použitím normálních precedencí, to jest s upřednostněním dělení a násobení před sčítáním a odčítáním.

>> math [2 + 3 * 4]
== 14

function! within?

Přijímá 3 argumenty typu pair! - pozici bodu x,y - souřadnice x,y levého horního bodu obdélníka - šířku a výšku obdélníka.

Vrací  true!, nalézá-li se bod uvnitř nebo na hranici plochy obdélníka.

>> within? 12x11 5x10 8x2     ; souřadnice vrcholů trojúhelníka typu pair!
== true


native! NaN?

Vrací  true!  není-li argument typu number!

>> NaN? square-root 9      
== false

>> square-root -9      
== 1.#NaN                        ; Red neumí komplexní čísla?



native! NaN

Returns TRUE if the number is Not-a-Number.

function! a-an                                                             nemtudum

Returns the appropriate variant of a or an (simple, vs 100% grammatically correct).


Logické funkce :

action! and~   či  op! and (infix)

native! equal?   či   op! =

native! greater-or-equal?  či  op! >=

native! greater?  či  op! >

native! lesser-or-equal?   či  op! <=

native! lesser?  či  op! <

native! not

native! not-equal?   či   op! <>

action! or~  či  op! or (infix)

native! same?  či  op! =?

Vrací true! odkazují-li argumenty na tatáž data (object, string etc.), to jest, odkazují-li na stejné místo v paměti.

>> a: [1 2 3]
== [1 2 3]

>> b: a                     ; b points to the same data as a
== [1 2 3]

>> a =? b
== true                     ; they are the same

>> c: [1 2 3]
== [1 2 3]

>> c =? a                ; c is equal to a, but is not the same data in memory.
== false

native! strict-equal?  or  op! ==

Vrací true! mají-li argumenty stejnou hodnotu a jsou stejného typu či  velikosti (lower-case/uppercase) u řetězců.

>> a: "house"
>> b: "House"
>> a = b
== true

>> a == b
== false