クロージャについて: 一旦、簡単にまとめてみます。
これまで考察してきたクロージャの件ですが、まだまだ頭の中では発散しているのですけど、一旦、簡単にまとめておきたいと思います。
ただ書き散らかしているだけでは意味ない (いや、意味はあると思ってるんですけど。自己矛盾だ。) ですからね。
Rui さん、shiro さんのコメントに助けられて、今では、
- 手続きをファーストクラスオブジェクトとして扱える。
- 静的スコープを持つ。
- 無限のエクステントが保証されている。
の三つの基盤が揃うことで、クロージャが実現されていると考えるに至りました。
Scheme 以外ではどうか判りませんが、こと Scheme に於いては、上の仕様に立脚する形でクロージャが実現されていると考えて差し支えないと思っています。
ただ、言語設計の推移としては、shiro さんから頂いたコメントで示唆されている様に、動的スコープに於ける環境問題 (FUNARG problem) が先にあり、その解決策として function特殊形式や、Scheme が選択した定義時からの環境の閉じ込めがあり、その帰結として Scheme では静的スコープが導入されるに至ったということの様です。
つまり、クロージャ (と言って良いと思うのですが) を実現するために静的スコープが導入されたということになりますか。
ということで、私が最初に書いた、「クロージャは、(上に挙げた様な) 幾つかの言語仕様によって副次的に利用可能となったものではないか」という仮説 (?) については、否定されることとなりました。
ただ、どちらが先か、という問題は抜きにして、クロージャを形作る土台となっているという意味では、考えていた通りだと思っています。
また、ここで言うクロージャとは行かずとも、有効に活用可能な形態もあると思っています。以前に言及した `ブロック' に相当するものですね。
これについては、また別のエントリにて。