- クロージャって何がいいの? [転載禁止]©2ch.net
211 :デフォルトの名無しさん[sage]:2014/12/13(土) 00:39:02.24 ID:gzcIElev - >>206
Wikipedia 英語版の解説と同じに見えるけど、何を言いたいのかな? ・Closure (computer programming) - Wikipedia, the free encyclopedia http://en.wikipedia.org/wiki/Closure_(computer_programming) 単に他人の文書をコピペして終わりにするだけでなく、引用した文書(ソース)を元に、 自分なりの意見を思考しそれを自分の文章として表現できるようになったほうがいいと思う で、とりあえず反論しておくと、その文書(= Wikipedia)の 章「mplementation and theory」には、冒頭に以下の記述がある > Closures are typically implemented with a special data structure that > contains a pointer to the function code, plus a representation of > the function's lexical environment (i.e., the set of available variables) > at the time when the closure was created. この理論としてのクロージャ定義は、SICP本(>>119) および >>4 のそれと矛盾していない そして Haskell のような純粋関数型言語に限定した文脈ではないのだから、 文中の "function code" は(>>207 で書いたように)単なる式だけではなく 破壊的代入や入出力等の副作用を伴う任意のコードも書けると解釈するのが自然だと考える
|
- クロージャって何がいいの? [転載禁止]©2ch.net
222 :名無しさん@そうだ選挙に行こう[sage]:2014/12/13(土) 20:13:18.59 ID:gzcIElev - >>210
本質という言葉の定義が曖昧ですが、自分なりにコメントします まず >>206(= Wikipedia, >>211)の章「2.1 First-class functions」には、 その冒頭に以下の記述があります > Closures typically appear in languages in which functions are first-class values ― > in other words, such languages enable functions to be passed as arguments, > returned from function calls, bound to variable names, etc., > just like simpler types such as strings and integers. つまりクロージャは「一級の値( first-class values)」であると定義しています 従って(一級市民ではない関数宣言 def よりも)一級市民であるクロージャ lambda を 本質とするのが正しいのではないかと思います (「宣言された関数は一級市民だけど、宣言そのものはそうではない」という意味です、念の為) (あくまで私見ですが)可能性があるのは、関数スコープ方式の手続き型言語である Python では、 関数型言語の特性を追加する際にクロージャを(lamda ではなく)宣言された関数へ実装したほうが (開発工数や難易度の視点からは)容易だったのではないかと推測します(詳細は省略....) 一言で言えば「Python は手続き型言語だから」ということですね
|
- 【Python】スクリプト バトルロワイヤル47【pl,rb,php,js】 [転載禁止]©2ch.net
12 :名無しさん@そうだ選挙に行こう[sage]:2014/12/13(土) 20:23:50.61 ID:gzcIElev - >>9
まだソースを探しているのかな?いつまで待てばいいのかな? とりあえず「みんなを納得させるほどの「結論」じゃない」にふさわしい、 過去の状況をクロージャのスレで発掘してみたから、コピペしとくね http://peace.2ch.net/test/read.cgi/tech/1415419907/197 アタマ悪い自分でも、たいへん分かりやすかったです -- 調べてみると、Python のラムダ式で任意の文が書けないという問題(>>189)は、 過去に何度もネット上で話題になっていたようだね: ・Is it possible to have multiple statements in a python lambda expression? - Stack Overflow (May 14 '09) http://stackoverflow.com/questions/862412/is-it-possible-to-have-multiple-statements-in-a-python-lambda-expression ・syntax - No Multiline Lambda in Python: Why not? - Stack Overflow (Aug 5 '09) http://stackoverflow.com/questions/1233448/no-multiline-lambda-in-python-why-not ・Why doesn't Python allow multi-line lambdas? - Programmers Stack Exchange (Aug 7 '11) http://programmers.stackexchange.com/questions/99243/why-doesnt-python-allow-multi-line-lambdas そして、この問題を解決すべく数多くの提案が出された: ・AlternateLambdaSyntax - Python Wiki https://wiki.python.org/moin/AlternateLambdaSyntax それら提案の中には、Ruby のブロックを真似しよう(similar to Ruby's blocks)、というものまであった ・[Python-ideas] Proposal for function expressions - Grokbase http://grokbase.com/t/python/python-ideas/097ccjz2c3/proposal-for-function-expressions しかし残念ながら、これ以上続けても収束しそうもないから議論は打ち切り、とGuido氏が宣言(強権発動?)して終わった ・[Python-Dev] Let's just *keep* lambda https://mail.python.org/pipermail/python-dev/2006-February/060415.html この顛末をGuido氏は「複数行のラムダは解けないパズル(unsolvable puzzle)」と語っている ・Language Design Is Not Just Solving Puzzles http://www.artima.com/weblogs/viewpost.jsp?thread=147358
|
- クロージャって何がいいの? [転載禁止]©2ch.net
224 :名無しさん@そうだ選挙に行こう[sage]:2014/12/13(土) 21:42:39.17 ID:gzcIElev - >>223
> 本質的ってのは、よりプリミティブなものっていう意味で書いたんだよ。 その意味であれば、関数型言語と Ruby/JavaScript だと 関数定義よりもクロージャのほうがが本質的だね プリミティブな名前とクロージャから関数(or メソッド)が作られるという 因果関係があるのだから ただし、Python だけは違うみたいだね > rubyだのjavascriptだのだって手続型言語だよ。 外見は手続き型言語だけど、どちらの言語もLISPをベースに設計されている だから最初から関数型言語と同等なクロージャを備えて誕生した それが知られるようになったのは最近だから、知らない人は多いけどね..... 手続き型言語として生まれ、後付けで関数型を増築した Python とは違うのだよ http://peace.2ch.net/test/read.cgi/tech/1409526637/857 -- > パクリどころか Ruby と JavaScript は、これらの作者自身が > Lisp を基礎として言語を設計したと語っている > > ・Lisp から Ruby への設計ステップ > http://yohshiy.blog.fc2.com/blog-entry-250.html > ・JavaScript: The World's Most Misunderstood Programming Language > http://www.crockford.com/javascript/javascript.html > (邦訳版「JavaScriptの勉強:世界で最も誤解されたプログラミング言語」へのリンクは閉鎖) > > だから関数型プログラミングという土俵の上で Ruby や JavaScript に > 手続き型言語の Python がいくら挑戦しても勝てずに負け続けているのは、 > しごく当然な結果なわけ
|
- クロージャって何がいいの? [転載禁止]©2ch.net
227 :名無しさん@そうだ選挙に行こう[sage]:2014/12/13(土) 23:06:18.71 ID:gzcIElev - >>224
>手続き型言語として生まれ、後付けで関数型を増築した Python とは違うのだよ 自己レスで補足する(すべての手続き型言語が Python と同じではない.... 同じ手続き型言語に関数型の特性を追加した言語でも、 調べた範囲だと少なくとも Perl5/Java8/C++11 のクロージャは ・>>4,>>119 のクロージャ定義に沿って設計され、 ・クロージャ内で任意の文が書ける ただしそれら言語がクロージャをサポートした時期は遅かった 真面目に設計したからだろう 対して Python の関数型サポートは素早かったけど、検討が不十分だったと言うほかない リリース後に改善要望/議論紛糾したあげく、結論を出せず現在に到る(>>197)
|