Series "changers"


Tyto příkazy mění původní řady !


action! clear

Smaže všechny elementy řady.

Pouhé přiřazení prázdného řetězce (" ")  nebo nuly nemusí mít očekávaný účinek. Pamatování "věcí" realizuje Red mnohdy neočekávanými způsoby. Skutečné smazání řady zajistí příkaz  clear.

>> a: [11 22 33 "cat"]
== [11 22 33 "cat"]

>> clear a
== []

>> a
== []

action! poke

Změní hodnotu elementu řady v pozici dané druhým argumentem na hodnotu třetího argumentu.

>> x: ["cat" "dog" "mouse" "fly"]
== ["cat" "dog" "mouse" "fly"]

>> poke x 3 "BULL"
== "BULL"

>> x
== ["cat" "dog" "BULL" "fly"]

>> s: "abcdefghijklmn"
== "abcdefghijklmn"

>> poke s 4 #"W"
== #"W"

>> s
== "abcWefghijklmn"

action! append

Vloží elementy druhého argumentu na konec řady.

>> x: ["cat" "dog" "mouse" "fly"]
== ["cat" "dog" "mouse" "fly"]

>> append x "HOUSE"
== ["cat" "dog" "mouse" "fly" "HOUSE"]

>> x
== ["cat" "dog" "mouse" "fly" "HOUSE"]

>>x: ["cat" "dog" "mouse" "fly"]
== ["cat" "dog" "mouse" "fly"]

>> y: ["Sky" "Bull"]
== ["Sky" "Bull"]  

>> append x y
== ["cat" "dog" "mouse" "fly" "Sky" "Bull"]

>> x
== ["cat" "dog" "mouse" "fly" "Sky" "Bull"]

>> append "abcd" "EFGH"
== "abcdEFGH"

/part

Omezuje počet připojovaných elementů.

>>  append/part ["a" "b" "c"] ["A" "B" "C" "D" "E"]  2
== ["a" "b" "c" "A" "B"]

/only

Připojí připojovanou řadu jako vnořený blok.

>> append/only ["a" "b" "c"] ["A" "B"]
== ["a" "b" "c" ["A" "B"]]

/dup

Připojí vícekrát (dup) druhý argument k prvnímu.

>> append/dup ["a" "b" "c"] ["A" "B"] 3
== ["a" "b" "c" "A" "B" "A" "B" "A" "B"]

action! insert

Vloží elementy druhého argumentu v místě aktuálního entry-indexu (obvykle to je počátek řady). Zatímco append vrací řadu od čela, insert ji vrací až za místem vložení. To umožňuje řetězit vícero operací  insert, nebo  počítat délku vložené části.

>> a: "abcdefgh"
== "abcdefgh"

>> insert a "OOO"
== "abcdefgh"

>> a
== "OOOabcdefgh"

>> a: "abcdefgh"
== "abcdefgh"

>> insert at a 3 "OOO"
== "cdefgh"

>> a
== "abOOOcdefgh"

/part

Vloží pouze zadaný počet vkládaných elementů.

/only

Umožňuje vložení elementů jako blok.

/dup

Umožňuje opakované vložení druhého argumentu v počtu, daném třetím argumentem.

>> a: "abcdefg"
== "abcdefg"

>> insert/dup a "XYZ" 3
== "abcdefg"

>> a
== "XYZXYZXYZabcdefg"

function! replace

Nahradit uvedený element danou hodnotou. Provede se jen pro první výskyt.

>> replace ["cat" "dog" "mouse" "fly" "Sky" "Bull"] "mouse" "HORSE"
== ["cat" "dog" "HORSE" "fly" "Sky" "Bull"]

/all

Nahradí se všechny výskyty

>> a: "my nono house nono is nono nice"
== "my nono house nono is nono nice"

>> replace/all a "nono " ""
== "my house is nice"

action! sort

Třídí řadu podle velikosti hodnot.

>> sort [8 4 3 9 0 1 5 2 7 6]
== [0 1 2 3 4 5 6 7 8 9]

>> sort "sorting strings is useless"
== " eeggiiilnnorrsssssssttu"


/case       

Provede case-sensitive třídění.

/skip

Zachází s řadou jako s pořadím skupin zadané délky.

/compare  

Pro definovaný komparátor (offset, blok, funkce) zadáme porovnávané elementy.

>> names: ["Larry" "Curly" "Mo" ]
== ["Larry" "Curly" "Mo" ]

>> sort/compare names function [a b] [a > b]         ; zajímavá diskrepance!

== ["Mo" "Larry" "Curly"]


/part

Třídí pouze části řad

/all

Porovná všechna vybraná pole. Používá se s upřesněním 'skip'  pro určení velikosti skupin.

/reverse

Obrátit pořadí

/stable

Místo někdy  nestabilního třídění Quicksort se použije stabilnější ale pomalejší algoritmus Merge.


action! remove

Odebere první hodnotu řady.

>> s: ["cat" "dog" "fox" "cow" "fly" "ant" "bee"]
== ["cat" "dog" "fox" "cow" "fly" "ant" "bee"]

>> remove s
== ["dog" "fox" "cow" "fly" "ant" "bee"]

>> s
== ["dog" "fox" "cow" "fly" "ant" "bee"]

/part

Odebere zadaný počet elementů.

>> s: "abcdefghij"
== "abcdefghij"

>> remove/part s 4
== "efghij"

Totéž lze provést příkazem  remove at [0 1 2 3 4 5] 2 


native! remove-each

Podobně jako foreach,  postupně vyhodnotí blok pro každý element řady. Vrací-li blok hodnotu  true, je element odebrán z řady:

Red []


a: ["dog" 23 3.5 "house" 45]

remove-each i a [string? i]                    ; odebere všechny řetězce

print a



23 3.5 45

Red []


a: "   my house in the middle of our street"

remove-each i a [i = #" "]                      ; odebere všechny mezery

print a



myhouseinthemiddleofourstreet

action! take

Odebere první element z řady a vrátí jej jako vratnou hodnotu (return).

>> s: ["cat" "dog" "fox" "cow" "fly" "ant" "bee"]
== ["cat" "dog" "fox" "cow" "fly" "ant" "bee"]

>> take s
== "cat"

>> s
== ["dog" "fox" "cow" "fly" "ant" "bee"]

/last

Odebere poslední element z řady a vrátí jej jako vratnou hodnotu (return).

>> s: ["cat" "dog" "fox" "cow" "fly" "ant" "bee"]
== ["cat" "dog" "fox" "cow" "fly" "ant" "bee"]

>> take/last s
== "bee"

>> s
== ["cat" "dog" "fox" "cow" "fly" "ant"]

 take/last and append can be used to perform stack (queue) operations.

/part

Odebere daný počet elementů z počátku řady a vrátí je jako  return.

>> s: ["cat" "dog" "fox" "cow" "fly" "ant" "bee"]
== ["cat" "dog" "fox" "cow" "fly" "ant" "bee"]

>> take/part s 3
== ["cat" "dog" "fox"]

>> s
== ["cow" "fly" "ant" "bee"]

/deep

Kopíruje vnořené hodnoty. 



action! move

Přemístí jeden (implicitně) nebo více elementů řady na jinou pozici téže nebo jiné řady. Mění oba vstupní argumenty.

/part

Přemístí zadaný počet elementů

>> a: [a b c d]
== [a b c d]

>> b: [1 2 3 4]
== [1 2 3 4]

>> move a b
== [b c d]

>> a
== [b c d]

>> b
== [a 1 2 3 4]

>> move/part a b 2
== [d]

>> a
== [d]

>> b
== [b c a 1 2 3 4]

Příkaz move může být kombinován s jinými příkazy pro přemístění uvnitř jediné řady. Na příklad:

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

>> move a tail a
== [2 3 4 5 1]

>> move/part a tail a 3
== [5 1 2 3 4]


action! change

Změní počáteční elementy řady a vrací řadu po změně. Mění pouze první řadu.

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

>> change a [a b]
== [3 4 5]

>> a
== [a b 3 4 5]

/part

Upraví měněnou délku řady vložením hodnot z jiné řady.


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

>> change/part a ["a" "b"] 3
== [4 5]

>> a
== ["a" "b" 4 5]


/only

Nahradí první element blokem.


>> change/only s: [1 2 3 4 5] [1 2]
== [2 3 4 5]

>> s
== [[1 2] 2 3 4 5]


/dup
Provede zadaný počet duplikátů změny.


function! alter

Připojí element k řadě nebo jej z řady odebere. Pokud   alter  zadaný element v řadě nenalezne připojí jej a vrátí true. Pokud jej nalezne, odebere jej a vrátí false.

>> a: ["cat" "dog" "fly" "bat" "owl"]
== ["cat" "dog" "fly" "bat" "owl"]

>> alter a "dog"
== false

>> a
== ["cat" "fly" "bat" "owl"]

>> alter a "HOUSE"
== true

>> a
== ["cat" "fly" "bat" "owl" "HOUSE"]


action! swap

Prohodí první elementy dvou řad. Vrací první řadu ale mění obě:

>> a: [1 2 3 4] b: [a b c d]
== [a b c d]

>> swap a b
== [a 2 3 4]

>> a
== [a 2 3 4]

>> b
== [1 b c d]

S použitím slova find lze prohodit libovolný element dvou řad nebo elementy téže řady:

>> a: [1 2 3 4 5] b: ["dog" "bat" "owl" "rat"]
== ["dog" "bat" "owl" "rat"]

>> swap find a 3 find b "owl"
== ["owl" 4 5]

>> a
== [1 2 "owl" 4 5]

>> b
== ["dog" "bat" 3 "rat"]


action! reverse

Převrátí pořadí elementů v řadě:

>> reverse [1 2 3]
== [3 2 1]

>> reverse "abcde"
== "edcba"

/part  omezí akci reverse na zadaný počet elementů:

>> reverse/part "abcdefghi" 4
== "dcbaefghi"