Podmínky
native! if
Provede blok při splnění zadané podmínky.
if <test> [ block ]
>> if 10 > 4 [print "large"]
large
native! unless
Totéž jako if not. Provede blok pouze při nesplnění zadané podmínky.
unless <test> [ block (if test false) ]
>> unless 10 > 4 [print "large"]
== none
>> unless 4 > 10 [print "large"]
large
native! either
Nový název pro klasickou podmínku if-else. Provede první blok, je-li podmínka vyhodnocena jako true ; v opačném případě provede druhý blok.
either <test> [true block] [false block]
>> either 10 > 4 [print "bigger"] [print "smaller"]
bigger
>> either 4 > 10 [print "bigger"] [print "smaller"]
smaller
native! switch
Provede blok, odpovídající zadané hodnotě.
Red[]
switch 20 [
10 [print "ten"]
20 [print "twenty"]
30 [print "thirty"]
]
twenty
>>
/default
Nenalezne-li program shodu se zadáním, provede 'defaultní' blok.
Red[]
switch/default 15 [
10 [print "ten"]
20 [print "twenty"]
30 [print "thirty"]
][ print "none of them"] ;default block
none of them >>
native! case
Vyhodnotí řadu podmínek a provede blok, odpovídající prvnímu testu s hodnocením true.
Red[]
case [
10 > 20 [print "not ok!"]
20 > 10 [print "this is it!"]
30 > 10 [print "also ok!"]
]
this is it!
>>
/all
Provede všechny testy s hodnotou true.
Red[]
case/all [
10 > 20 [print "not ok!"]
20 > 10 [print "this is it!"]
30 > 10 [print "also ok!"]
]
this is it!
also ok!
native! catch & throw
Catch a throw lze použít pro vytvoření složitější řídící struktury. Ve sve nejjednodušší formě obdrží catch návratovou hodnotu z více možností 'throw' :
Red[]
a: 10
print catch [
if a < 10 [throw "too small"]
if a = 10 [throw "just right"]
if a > 10 [throw "too big"]
]
just right
catch/name
odchytí pojmenované 'throw'
throw/name
throws to a named catch
Boolean branching
native! all
Vyhodnotí všechny výrazy v bloku a vrací poslední výslednou hodnotu, lze-li všechny výrazy označit jako true. Případně vrací none, je-li některý výraz hodnocen jako false.
>> john: "boy"
== "boy"
>> alice: "girl"
== "girl"
>> all [john = "boy" alice = "girl" 10 + 3] ;all true, the last evaluation is returned.
== 13
>> all [john = "boy" alice = "boy" 10 + 3] ; alice = "boy" is false!
== none
native! any
Hodnotí postupně výrazy v bloku a vrací první hodnotu, která není false. Jsou-li všechny vyhodnocené hodnoty false , vrací none.
>> john: "boy"
== "boy"
>> alice: "girl"
== "girl"
>> any [john = "girl" alice = "girl" 10 + 3] ;alice = "girl" is not false: return it!
== true
>> any [john = "girl" 10 + 3 5 > 2] ; 10 + 3 is not false: return it!
== 13