- 291 名前:デフォルトの名無しさん mailto:sage [2014/12/17(水) 21:39:32.52 ID:JUumI3zm.net]
- >>282
でれでは、ここまでの結論をまとめてみる まず最初は。>>289 の評価結果から: [Python:X] Python の lambda 構文は式しか書けないという制限があるから、 クロージャ固有の局所環境を持つことができない したがって、Python の lambda 構文は「関数型言語のクロージャ」ではない [Ruby:X] Ruby のブロックはオブジェクトであるから、 その評価にはメソッド Proc#call をコールしなければならない したがって、Ruby のブロックは「関数型言語のクロージャ」ではない [JavaScript:O] JavaScript の関数リテラルは任意の書けるからクロージャ固有の局所環境を持てるし、 なおかつ引数に適用するだけで評価できる したがって、JavaScript の関数リテラルは「関数型言語のクロージャ」である 結果として、最も忠実に「関数型言語のクロージャ」が実装されている(>>277)、と言える 続けて、この評価結果が現実のプログラミングに与える影響をまとめる ここでは Apple 公式リファレンスに含まれる Swift クロージャのサンプルコードを「お題」とした(>>191) ・高階関数 map に与えるクロージャをインラインで書ける [Python:X] ・インラインでは関数再帰を使った可読性の低いコードになってしまう(>>208) ・このため、一般には(インラインで書くのはあきらめて)関数定義を使わざるをえない [Ruby & JavaScript:O] ・インラインで自然な while ループを使った(ふつうのプログラマにとって)分かりやすいコードが書ける ・参照透明性のある関数型プログラミングで書ける [Python:X] 関数再帰で書けるが、可読性の低いコードになってしまう(>>208) [Ruby:O] (関数再帰の代わりに)組み込みの高階関数風メソッドを使うことで、可読性の高いコードが書ける(>>267) [JavaScript:?] (書けるか否か、現時点では不明)
|

|