Bloky se používají k prezentaci kolekce dat nebo kódu, jenž může být kdykoli vyhodnocen. Tyto datový typ patří do typesetů any-block!
, any-list!
a series!
.
Hodnoty a výrazy v bloku se implicitně nevyhodnocují:
>> my-block: [print reverse "Hello" (2 + 3 42]
== [print reverse "Hello" (2 + 3) 42]
>> my-block
== [print reverse "Hello" (2 + 3) 42]
-
Nativní
příkazdo
vrací výsledek posledního výrazu v bloku:
>> do my-block olleH == 42
-
Příkaz
reduce
vrací kopii bloku, s vyhodnocením všech výrazů:
>> reduce my-block olleH == [unset 5 42]
Hodnoty bloku lze vytvořit s použitím literálové syntaxe nebo při běhu programu s použitím konstruktoru make
nebo konverzí to
.
Kolekce hodnot, vymezených hranatými závorkami a oddělených mezerami.
[]
[one 2 "three"]
[print 1.23]
Bloky mohou zabírat více řádků a mohou obsahovat jiné bloky.
[one 2 "three" ] [one 2 "three" [x foo 1.23]]
Více řádků, mezer a tabulátorů je povoleno, pokud netrhají hodnoty.
Správně: [42 print "foo"]
Nesprávně: [42 pr int "foo"]
; jde o jiný blok
*make
Vytvoření prázdného bloku předalokovaného pro 10 elementů:
>> make block! 10 == []
Vytvoření bloku s 10 elementy s počátečními hodnotami none
:
>> append/dup make block! 10 none 10 == [none none none none none none none none none none]
*to
>> to block! {one 2 "three" 4:00} == [one 2 "three" 4:00:00] >> to block! "foo 1.23 [email protected]" == [foo 1.23 [email protected]] >> to block! 42 == [42]
Elementy bloku jsou přístupné prostřednictvím lomítka s indexem elementu:
>> b: [12 [34 56]] == [12 [34 56]] >> b/1 == 12 >> b/2/2 == 56
Blok (a rovněž každý objekt typesetu any-list!
) lze rovněž používat jako uložiště dvojic key/value. V tom případě se hledání uskutečňuje pro první zadanou hodnotu dvojice:
>> b: [x 12 y [z 34]] == [x 12 y [z 34]] >> b/x == 12 >> b/y == [z 34] >> b/y/z == 34
Pro hodnotu typu block!
lze použít všechny komparátory: =, ==, <>, >, <, >=, <=, =?
. Navíc jsou podporovány funkce min
a max
.