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"