- 変数
x = 1 + 1
say x #=> 2
- 多重代入
$(a, b) = &(1, 2)
say a #=> 1
say b #=> 2
$(a, b) = &(b, a)
say a #=> 2
say b #=> 1
- リスト
lst = [1, 2, 3 | 4]
say lst.car() #=> 1
say lst.cdr() #=> [2, 3 | 4]
say lst.cdr().cdr().cdr() #=> 4
- ハッシュ
place = %{ "Mt. Fuji" => "Shizuoka", "Mt. Aso" => "Kumamoto" }
say place["Mt. Fuji"] #=> Shizuoka
say place["Mt. Aso"] #=> Kumamoto
- ブロック
n = 0
if(n == 0):
n++
else:
n--
say n #=> 1
- 無名関数
fn = ^(x): say x
fn("foo") #=> foo
lst = [1, 2, 3].map^(x): x ** 2
say lst #=> [1, 4, 9]
- messenger
messenger = '(1 + 2)
say messenger #=> 1.(+)(2)
say messenger.receiver #=> 1
say messenger.message #=> (+)
say messenger.args #=> &(2)
- expander
say &(1, *[2, 3], *%{ 'a => 4 }, *&(5, :b 6)) #=> &(1, 2, 3, 5, :a 4, :b 6)
※ :a, :b の順序は未定義
- 準クオート
recv = 2
args = &({ say "meow" })
say `(?recv).times(?*args) #=> 2.times({ say("meow") })
- マクロ
say until #=> macro^(test, body){ `while((?test)(!@)(), { begin(?body) }) }
sum = i = 0
until(i > 10):
sum += i
i++
say sum #=> 55
- 継続
2 * callcc^(x): cont = x; 2
say cont(5) #=> 10