わかったつもりでいたけど、よくわかっていなかった。 Wikipediaの説明だと、 クロージャ (クロージャー、Closure) は、プログラミング言語において引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決する関数のことである。 http://ja.wikipedia.org/wiki/クロージャ 引数以外の変数を自身が定義された環境において解決する関数? いまいちよくわからない。wikipediaの例をlispに置き換えて実行してみる。 CL-USER> (defun new-counter () (let ((counter 0)) ;;このcounter (defun new-id () (incf counter)))) NEW-COUNTER CL-USER> (setq c1 (new-counter)) NEW-ID CL-USER>