Přístup a formátování dat


native! get

Každé slovo Redu, nativní i uživatelsky vytvořené, je umístěno ve slovníku. Je-li slovo sdruženo s výrazem, je uloženo i s přidruženým výrazem, který se vyhodnotí v závislosti na typu volání slova.

Chcete-li znát slovníkový popis slova, použijete příkaz  get . Uvědomte si, že když v Redu odkazujete na slovo samotné (nikoliv jeho hodnotu), předznamenáte slovo apostrofem ('). Příkaz  get poskytuje význam i nativních slov ale vrací chybové hlášení, je-li použit pro konkretní hodnotu, např. typu  integer!, pair! či tuple! :

>> get 'print
== make native! [[
       "Output...

>> get 'get
== make native! [[
       "Return...

>> a: 7
== 7

>> get 'a
== 7

>> a: [7 + 2]
== [7 + 2]

>> get 'a
== [7 + 2]

>> get 8
*** Script Error: get does not allow integer! for its word argument


action! mold

Příkaz mold přemění zadanou hodnotu (např. typu block!integer!, series! etc.) na řetězec a vrátí jej:

>> type? 8
== integer!

>> type? mold 8
== string!

>> print [4 + 2]
6

>> print mold [4 + 2]
[4 + 2]

Refinements:

/only - Vyloučí vnější hranaté závorky bloku
/all - Vrací hodnotu v načtení schopném formátu
/flat - Vyloučí veškerou identaci
/part - Omezí délku výsledku na zadanou hodnotu

action! form

Příkaz form  také přemění zadanou hodnotu na řetězec ale v závislosti na typu, nemusí výsledný text obsahovat extra informace o typu (jako [ ] { } a ""), jako u příkazu mold. Užitečné  pro Manipulace s textem.

Red []

print "---------MOLD----------"

print mold {My house

       is a very

       funny house}

print "---------FORM----------"        

print form {My house

       is a very

       funny house}

print "---------MOLD----------"        

print mold [3 5 7]

print "---------FORM----------"        

print form [3 5 7]


---------MOLD----------

"My house^/^-is a very^/^-funny house"

---------FORM----------

My house

   is a very

   funny house

---------MOLD----------

[3 5 7]

---------FORM----------

3 5 7



Umožňuje použití refinementu /part k omezení počtu znaků.

 Hlavní použití pro mold a form:

mold se hlavně používá pro přeměnu řad na kód, který může být uložen a interpretován později

form se hlavně používá pro generování obyčejného textu z řad

>> a: [b: drop-down data[ "one" "two" "three"][print a/text]]
== [b: drop-down data ["one" "two" "three"] [print a/text]]

>> mold a
== {[b: drop-down data ["one" "two" "three"] [print a/text]]}

>> form a
== "b drop-down data one two three print a/text"

function! probe

Příkaz  probe vytiskne svůj argument bez vyhodnocení a také jej vrátí. Lze jej s výhodou použít při ladění. Vzpomeňte si, že příkaz print svůj argument vyhodnocuje.

>> print [3 + 2]
5

>> probe [3 + 2] [3 + 2]
== [3 + 2]

>> print probe [3 + 2]
[3 + 2]
5

native! reduce

Vyhodnocuje výrazy uvnitř bloku a vrací nový blok s vyhodnocenými hodnotami. Nahlédněte do kapitoly  Vyhodnocení.

>> a: [3 + 5 2 - 8 9 > 3]
== [3 + 5 2 - 8 9 > 3]

>> reduce a
== [8 -6 true]

>> b:[3 + 5 2 + 9 7 > 2 [6 + 6 3 > 9]]
== [3 + 5 2 + 9 7 > 2 [6 + 6 3 > 9]]

>> reduce b
== [8 11 true [6 + 6 3 > 9]]                ;it does not evaluate expressions of blocks inside blocks

>> b
== [3 + 5 2 + 9 7 > 2 [6 + 6 3 > 9]]        ;the original block remains unchanged.

/into     Vloží výsledek do připraveného bloku.

function! collect a keep


Shromáždí v novém bloku všechny hodnoty vybrané funkci keep  z těla bloku.

Jinými slovy: vytvoří nový blok, zachovávaje pouze hodnoty určené funkcí keep, obvykle na základě splnění určité podmínky.


Red []


a: [11 "house" 34.2 "dog" 22]


b: collect [

       foreach element a [if string? element [keep element]]

       ]

print b                     ;obsah bloku b je vytvořen funkcí collect


house dog

syntaxe pro upřesnění: collect/into

Red []


c: ["one" "two"]                           

a: [11 "house" 34.2 "dog" 22]

 

collect/into [

       foreach element a [if scalar? element [keep element]]] c                                                                            

print c          ;obsah bloku c je rozšířen o vybrané prvky bloku a


one two 11 34.2 22

native! compose

Vrací kopii bloku, vyhodnocujíce pouze prvky typu  paren!.

Příkaz compose je velmi důležitý pro dialekt DRAW;


Red []


a: [add 3 5 (add 3 5) 9 + 8 (9 + 8)]


print a                        ; vyhodnotí vše, včetně zanořených závorek

probe compose a        ; vrací argument s vyhodnocenými závorkami typu paren!


8 8 17 17
[add 3 5 8 9 + 8 17]


    /deep        => provést příkaz compose i pro zanořené bloky

Red []


a: [add 3 5 (add 3 5) [9 + 8 (9 + 8)]]


probe compose a                

probe compose/deep a        


[add 3 5 8 [9 + 8 (9 + 8)]]
[add 3 5 8 [9 + 8 17]]


    /only  -  složit (compose) vnořené bloky jako bloky, obsahující své hodnoty  nemtudum

                je zapotřebí vložit příklad

    /into   - vložit výsledek do připraveného bloku místo vytvářní nového bloku.

Red []


a: [add 3 5 (add 3 5) 9 + 8 (9 + 8)]

b: []


compose/into a b


probe b


[add 3 5 8 9 + 8 17]