ラムダ式とかクロージャとか継続とか

今日クロージャと継続という用語を知った。なんか世の中広い。知らないことがいっぱいだ。
ラムダ式とかクロージャとか継続というのは関数型言語のタームだ(と思う。関数型言語をひとつもまともに知らないのでよく分からない)。C/C++/Javaみたいな手続き型言語ばっかし使ってるとなかなかお目にかかる機会がないが、実に興味深い概念だ。(PHPにはlambdaという関数があるし、Perlにもクロージャがあるようだ。)

ラムダ式

ラムダ式とは関数を値とする式。この概念を知ったのはだいぶ前にこの記事を読んでだった。ラムダ式の概念の説明とC++ラムダ式を実装するという記事(の翻訳)

クロージャ

クロージャこちらの記事を見て用語を知った。意味が分からなかったのでググってここを見た。僕の理解した範囲では、クロージャとはラムダ式の束縛の実装方式のことかと思う。

継続

継続というのはプログラムが戻った(進んでもいいが)先で処理を進めるのに必要なデータ(だけじゃないな…状態?っていうののも変だしな)。詳しくはこちら


前に書いたJavaScriptでプログレスバーを実装するとき、いったんJavaScriptから制御を戻さないとプログレスバーが描画されないのでちょっと苦労した。実はこれ、継続が分かっているとすっきり書けることに気づいた。また、クロージャを使うとグローバル変数を使わずにすっきり書ける。(継続かクロージャを使って書き直すのはそのうちに…)


プログラムは奥が深い。自分より先を行ってる人たちがどのくらい先を行ってるのかよく分からない。絶望した!糸色望先生バリに絶望した!とかこれを見て思った。
そうなのよね。どのくらい先か分からないにも関わらず、ランナーが「先を」走ってるのが見えちゃうんだよね。インターネットのせいで。でもまだ僕は先を見て走ろう。

追記:
PHPにlambdaなる関数があるとか書いてしまいましたが、記憶違いでした。create_function()なる関数があるにはあるけれど、いまいち使い勝手がよろしくないもののようです。文字列から関数を作れるので、関数リテラル(=lambda式)として動作はします。しかし、多分評価時に束縛されてしまって普通の関数になってしまうので、おそらくクロージャのような動作をさせることはできないようです。