Gauche:用語集

Gauche:用語集

Rui(2007/02/05 19:25:50 PST): 当初理解していなかった用語をまとめてみました。


ファーストクラス (first class、第一級)

一般のオブジェクトと同様に、変数への代入や実行時の作成などを行えるものを、ファーストクラスのオブジェクトという。たとえばSchemeの手続きはファーストクラスのオブジェクトである。一方で、たとえばJavaのメソッドはそれ単体で取り出したり関数からの返り値にしたりできないので、ファーストクラスではない。call/ccで取り出した継続は、手続きとまったく同じように変数に代入したり引数として渡したりできるので、これもファーストクラスである。定義が曖昧であるがゆえに、あまり厳密に考えても仕方のない用語である。

トップレベル

束縛[そくばく] (binding、バインディング)

述語 (predicate)

#tか#fを返す手続きのこと。

動的な環境 (dynamic environment)

current-input-portやcurrent-output-portのように呼ばれたタイミングによって異なる値を返す手続きが、その時点の動的スコープの値を得るために参照する先のこと。with-input-from-fileやwith-output-from-fileを使うと、動的スコープの中に限り別の値を返すように動的な環境を拡張できる。GaucheではSRFI 39のパラメータオブジェクトを使って、ユーザ定義の動的変数を定義できる。

環境 (environment)

実行時 (execution time)

コンパイル時 (compile time)

R5RS

手続き (procedure)

関数(funciton)と呼ぶ言語もあるが、Schemeでは手続き(procedure)という用語を使っている。

アリティ (arity)

手続きの取る引数の数のこと。引数を取らない手続きのアリティは0、可変個の引数を取る手続きのアリティは可変であるという。Gaucheではアリティをarityで問い合わせることができる。

サンク (thunk)

引数を取らない手続きのこと。

評価 (evaluation)

式の値を求めること。

適用 (application)

引数の値を手続きに渡して式を評価すること。

末尾呼び出し (tail call)

末尾再帰(tail recursion)ということもあるが、自分自身を呼び出す再帰でなくともよいので、末尾呼び出しというほうが正確。

スコープ (scope)

空間的な広がりについていう。プログラムの字面(カッコの内側であるなど)で見たスコープをレキシカルスコープ、実行時の手続き呼び出しの入れ子状態のような動的な観点でのスコープをダイナミックスコープという。

エクステント (extent)

時間的な広がりについていう。Schemeの変数は無限エクステントである、といったとき、変数は参照されている限り回収されず使い続けることができる、つまり寿命が無限であるということを意味する。

クロージャ (closure)

手続き本体と動的な環境をあわせたものをクロージャという。クロージャの中の変数はクロージャが生成されたときの環境を参照している。

継続 (continuation)

次に行う処理のこと。call/ccの引数の手続きに渡される、手続きとして取り出された継続のことを、call/ccに捕捉(capture)された継続という。

自由変数 (free variable)

式の外を参照している変数。クロージャの中から外の環境を参照している変数や、トップレベルを参照している変数は自由変数である。

More ...