ラムダ式とかクロージャとか継続とか
今日クロージャと継続という用語を知った。なんか世の中広い。知らないことがいっぱいだ。
ラムダ式とかクロージャとか継続というのは関数型言語のタームだ(と思う。関数型言語をひとつもまともに知らないのでよく分からない)。C/C++/Javaみたいな手続き型言語ばっかし使ってるとなかなかお目にかかる機会がないが、実に興味深い概念だ。(PHPにはlambdaという関数があるし、Perlにもクロージャがあるようだ。)
継続
継続というのはプログラムが戻った(進んでもいいが)先で処理を進めるのに必要なデータ(だけじゃないな…状態?っていうののも変だしな)。詳しくはこちら
前に書いたJavaScriptでプログレスバーを実装するとき、いったんJavaScriptから制御を戻さないとプログレスバーが描画されないのでちょっと苦労した。実はこれ、継続が分かっているとすっきり書けることに気づいた。また、クロージャを使うとグローバル変数を使わずにすっきり書ける。(継続かクロージャを使って書き直すのはそのうちに…)
プログラムは奥が深い。自分より先を行ってる人たちがどのくらい先を行ってるのかよく分からない。絶望した!糸色望先生バリに絶望した!とかこれを見て思った。
そうなのよね。どのくらい先か分からないにも関わらず、ランナーが「先を」走ってるのが見えちゃうんだよね。インターネットのせいで。でもまだ僕は先を見て走ろう。
追記:
PHPにlambdaなる関数があるとか書いてしまいましたが、記憶違いでした。create_function()なる関数があるにはあるけれど、いまいち使い勝手がよろしくないもののようです。文字列から関数を作れるので、関数リテラル(=lambda式)として動作はします。しかし、多分評価時に束縛されてしまって普通の関数になってしまうので、おそらくクロージャのような動作をさせることはできないようです。