Skip to content

Latest commit

 

History

History
167 lines (115 loc) · 3.05 KB

File metadata and controls

167 lines (115 loc) · 3.05 KB

Datový typ paren!

1. Úvodem

Hodnota typu paren! je řada elementů libovolného typu, obklopená kulatými závorkami ( …​ ). Obsah uvnitř závorek je (bez dalšího) okamžitě vyhodnocován.

Datový typ paren je subtypem typesetů any-block!, any-list! a series!.

2. Vytvoření

Objekt typu paren! lze vytvořit literálovou syntaxí nebo při runtime použitím konstruktoru make, konverzí to nebo funkcí as.

2.1. Literálová skladba

Literálem hodnoty typu paren! je prostý zápis elementů, omezený kulatými závorkami. Vyhodnocení obsahu mezi závorkami lze potlačit slovem quote před závorkou. Potlačené vyhodnocení také umožní deklarovat slovo bez přiřazené hodnoty:

>> (2 + 3)
== 5
>> quote (2 + 3)
== (2 + 3)

>> quote (one 2 "three")
== (one 2 "three")
>> (one 2 "three")
*** Script Error: `one` has no value

>> type? (1 2 "one")
== string!
>> type? quote (1 2 "one")
== paren!

Hodnota typu paren! (případně i rozepsaná do více řádků) bez příkazu quote se redukuje na hodnotu posledního členu:.

>> pa: (1
(    2
(    "three"
(    )
>> pa
== "three"

Automaticky nevyhodnocovaný objekt typu paren! můžeme vytvořit odkazem na počátek bloku:

>> par: first [(1 + 2 * 3 / 4)]
== (1 + 2 * 3 / 4)
>> par
== (1 + 2 * 3 / 4)
>> do par
== 2.25

2.2. Konstruktor make

>> make paren! [2 5 "a"]
== (2 5 "a")

Prázdný paren pro 10 elementů vytvoříme příkazem:

```red
>> make paren! 10
== ()

Paren s deseti elementy počáteční hodnoty none:

>> append/dup make paren! 10 none 10
== (none none none none none none none none none none)

2.3. Konverze to, as

>> to paren! {one 2 "three" 4:00}
== (one 2 "three" 4:00:00)

>> to paren! "foo 1.23 me@me.com"
== (foo 1.23 me@me.com)

>> to paren! 42
== (42)

Použití as:

>> as paren! [1 2 3]
== (1 2 3)

3. Komparace

Lze použít všechny komparátory =, ==, <>, >, <, >=, <=, =?, včetně funkcí min a max.

Note
Protože jsou hodnoty objektu typu paren! ihned vyhodnocovány, je vratnou hodnotou funkcí min nebo max hodnota posledního výrazu v parenu. Komparátory porovnávají poslední elementy porovnávaných parenů, není-li jejich vyhodnocení potlačeno.
>> max (1 2 3) (4 5 6)
== 6

>> (1 2 3) < (4 5 6)
== true

>> (1 2 3) < (4 5 2)
== false

>> (quote (1 2 3)) < (quote (4 5 2))
== true

4. Testování hodnot

Použijte funkci paren? k ověření, zda je posuzovaná hodnota typu paren!.

>> paren? quote (42 print "foo")
== true

Ke zjištění typu také použijeme funkci type?:

>> type? quote (42)
== paren!

[NOTE, caption=Poznámka]

Necitované (unquoted) hodnoty paren vrací typ poslední hodnoty

```red
>> paren? (42)
== false

>> any-list? (42)
== false

>> type? (42)
== integer!

>> type? ('a 2 + 2 "hello")
== string!

>> type? (42 print "foo")
foo
== unset!

5. Předdefinovaná slova

5.1. Funkce

expand-directives, paren?, series?, to-paren

5.2. Natives

as, compose