グローバル変数

組み込み変数

stdin
標準入力を表す読み取り専用のストリーム
stdout
標準出力を表す書き込み専用のストリーム
stderr
標準エラー出力を表す書き込み専用のストリーム
ARGS
与えられた引数のリスト
__FILE__
現在読み込んでいるファイル名
PROGRAM_NAME
プログラムとして実行しているファイル名
LOAD_PATH
ファイルをロードする際に参照するパスのリスト

組み込み関数

begin(body)
body がブロックならその式を順に実行し、それ以外なら評価した値を返します。
if(cond, then, &key else)
cond が真なら then を、偽なら else を実行します。
exit()
プログラムを終了します。
say(obj)
標準出力に obj を文字列化したものを書き込み、改行を付加します。
print(obj)
標準出力に obj を文字列化したものを書き込みます。
hear()
標準入力から1行読み取ります。改行は含まれません。
load(fname)
fname という名前のファイルを Cyan のプログラムとして読み込みます。
cons(obj1, obj2)
obj1 を car, obj2 を cdr とするリストを返します。

組み込みマクロ

given(body)
下記のように使います。
given(x):
  when(1, 2, 3):
    say("x == 1 or 2 or 3")
  when(4, 5):
    say("x == 4 or 5")
  default:
    say("x == unknown")
もともとは初期化ファイル群の中の control.cy で定義されていましたが、 展開に時間がかかりすぎていたため、組み込みのマクロにしました。

初期化時に定義される変数

LOADED_FILES
require で読み込んだファイル名のリスト

初期化時に定義される関数・マクロ

definition.cy

関数

macro(func)
スロット func に func を持つマクロを返します。
method(func)
func の第一仮引数に self を追加した関数を返します。

マクロ

mac(name, func)
name が messenger ならば func をマクロメソッドとして、 それ以外ならばマクロとして name に代入します。
def(name, func)
name が messenger ならば func をメソッドとして、 それ以外ならば関数として name に代入します。

control.cy

関数

unless(cond, body)
cond が偽なら body を実行します。

マクロ

loop(body)
body の実行を繰り返します。break と continue が使えます。
while(test, body)
test が真の間、body の実行を繰り返します。
until(test, body)
test が偽の間、body の実行を繰り返します。
for(init, test, step, body)
init を評価し、test が真の間 body の実行を繰り返します。 実行が終わるごとに step を評価します。
cond(body)
下記のように使います。
cond:
  (x > 0):
    say("x > 0")
  (x < 0):
    say("x < 0")
  else:
    say("x == 0")

anaphoric.cy

マクロ

aif(cond, then, &key else)
変数 it に cond を代入する以外は if と等価です。
awhile(test, body)
変数 it に test を代入する以外は while と等価です。
alambda(func)
変数 self に func を代入し、func を返します。

assignments.cy

マクロ

update!(target, func)
target に func(target) を代入します。
push!(target, obj)
target に [obj | target] を代入します。
pop!(target)
target に target.cdr() を代入し、代入前の target.car() を返します。

primitive.cy

関数

callcc(func)
func に return を渡します。
do(body, &key where = {})
where を実行後 body を実行します。
compose(fn1, fn2)
fn1 と fn2 を合成します。
complement(fn)
fn のコンプリメント関数を返します。
require(fname)
fname という名前のファイルをロードします。 一度ロードしたファイルはその後ロードしません。
error(output)
エラー出力に output を書き込み、exit を呼び出します。

マクロ

let(obj, &opt func)
下記のように使います。
let^(&opt a = 1, b = 2):
  say(a + b)

let(loop)^(&opt lst = [1, 2, 3]):
  unless(lst.null?()):
    say(lst.car())
    loop(lst.cdr())
二つ目の例は、scheme の named let に当たります。

list.cy

関数

iota(count, &opt start = 0, step = 1)
start から step ずつ加算された count 個の要素を持つリストを返します。

class.cy

マクロ

class(name, func)
name という名前のクラスを定義します。
# 例
class(A)^(B):
  c = 0
  def(init)^:
    .d = 0
  def(f)^(x):
    .parent.c -= x
    .d += x
  def(g)^:
    &(.parent.c, .d)

# 上のコードは、次のコードと等価です。
begin:
  A = B.child()
  A.c = 0
  def(A.init)^:
    .d = 0
  def(A.f)^(x):
    .parent.c -= x
    .d += x
  def(A.g)^:
    &(.parent.c, .d)
クラスの使用法については、 擬似クラスの項を見てください。