Cyan クイックチュートリアル

変数
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