next up previous
Next: 4.1 レキシカルクロージャ Up: ソフトウェア第三 講義資料 クロージャ,スコープ,遅延評価,オブジェクト,立体モデル Previous: 3 Funarg問題(Function Argument Problem)


4 関数閉包(closure)

関数をデータとして扱った場合のfunarg問題は,関数を定義した時 点の環境とその関数が実行される場合の環境との二つの環境の区別を明確に してない場合におこる.関数に環境を付加したものをクロージャとして 取り扱うことで,この問題を解決することができる. クロージャは関数をデータとして扱うために考えられたものである.関数をデー タとして扱う場合には,関数を定義した時点の環境とその関数が実行される場 合の環境との二つの環境をどのように区別するかということが問題となる. そこで,CommonLispでは,関数データが定義された時点の局所変数の環境デー タをすべてその関数データの中に保存した形の関数データを考え,取り扱える ようになっている.そのように環境も保存した関数データであるためにクロー ジャと呼ばれている.



generated through LaTeX2HTML. M.Inaba 平成18年5月7日