関数リファレンス

チュートリアルで解説した以外にも、いくつかの組み込み関数が存在します。 このページでは、それらの関数も含めて全ての組み込み関数を解説します。

i "identity"

i関数は、引数を一つ受け取り、それをそのまま返す関数です。

k "constant generator"

k関数は、引数を二つ受け取り、二つ目を捨て一つ目を返します。 ただし、二つ目の引数も評価はされます。

s "substitution"

s関数は、引数を三つ受け取り、 三つ目を引数として一つ目を、三つ目を引数として二つ目をそれぞれ関数として呼び出した後、 後者の返り値を引数として前者の返り値を関数として呼び出します。 これらの一連の関数呼び出しは、sに三つ目の引数が渡されるまで発生しません。

.x "print"

xは任意の1バイト文字になります。呼び出し時に任意の一文字を出力します。 .xで一つの関数です。 返り値などはiと同じです。

r "carriage return"

改行を出力する.x関数の別名です。

@ "read"

標準入力から一文字読み込み、それを"current character"とします。 引数Xをとり、読み込みに成功した場合は`Xiを、 失敗したりファイル終端に達した場合は`Xvを返します。

?x "compare character read"

@関数で読み込んだ"current character"が、 文字xと等しいかどうかを調べます。 引数Xをとり、等しかった場合は`Xiを、 等しくなかったり"current character"が存在しなかった場合は`Xvを返します。

| "reprint character read"

@関数で読み込んだ"current character"を、 そのまま標準出力に再出力します。 引数Xをとり、出力に成功した場合は`X.x(xは出力した文字)を、 出力に失敗した場合は`Xvを返します。

v "void"

この関数は、引数を捨て、v自身を返します。

e "exit"

この関数が呼び出された時、プログラムは終了します。

d "delay"

この関数は、引数X評価せずに受け取りXを評価するという約束(promise)を返します。 この約束が引数Yで関数として呼び出された場合、 まずXが評価され、その結果に引数Yを与えて呼び出します。

例えば、次の例で改行は出力されません。

`d`ri

引数となる`riは評価されずにdに渡されるので、 関数rは呼び出されません。

次の例のように、約束を実行すると改行は出力されます。

``d`rii

`d`riを実行して、`riを評価するという約束が返され、 それがまた引数iで呼び出されているので、 約束が評価されて改行が出力されます。

c "call with current continuation"

c関数が引数Xで呼び出されると、 `X<cont>が呼び出されます。 ここで、<cont>はある特殊な関数です。 `X<cont>の実行中に、 <cont>が関数として一度も呼び出されなければ、 c関数は`X<cont>を返します。 しかし、<cont>が引数Yで呼び出された場合、 即座に`X<cont>の実行を中断し、 c関数はYを返します。

例で見てみましょう。次のプログラムは、改行を出力しません。

`c``s`kr``si`ki

引数``s`kr``si`kicに渡されるので、

```s`kr``si`ki<cont>

となります。一番目のsを展開すると、

```kr<cont>```si`ki<cont>

となります。次に、もう一つのsを展開すると、

```kr<cont>``i<cont>`ki<cont>

となり、`i<cont>の返り値<cont>が、 `kiの返り値iを引数として呼び出されるため、 この関数の実行が中断され、rは呼び出されず、 この`c``s`kr``si`ki全体の返り値はiとなります。