トップページ > プログラム > 2014年12月11日 > GpAyUabF

書き込み順位&時間帯一覧

8 位/234 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000000012126



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
【Python】スクリプト バトルロワイヤル47【pl,rb,php,js】 [転載禁止]©2ch.net
クロージャって何がいいの? [転載禁止]©2ch.net
くだすれPython(超初心者用) その25©2ch.net

書き込みレス一覧

【Python】スクリプト バトルロワイヤル47【pl,rb,php,js】 [転載禁止]©2ch.net
10 :デフォルトの名無しさん[sage]:2014/12/11(木) 20:36:27.72 ID:GpAyUabF
>>9
何を言いたいのかよく分からんが、>>7 で指摘されてた Ruby 1.8 の
問題(バグ)は結論が出て対策を終えている
・Ruby 2.0 ブロックローカル変数 -- Matzにっき(2005-03-09)
 http://www.rubyist.net/~matz/20050309.html#p03
この記事では 2.0 となっているが、実際には 1.9 で対策を終えた
・ブロックパラメータ(仮引数)に関する変更 -- 第3回 Ruby1.9の新機能ひとめぐり(中編)
 http://gihyo.jp/dev/serial/01/ruby/0003

Ruby 1.9 以降でブロックローカル変数に関する話題は記憶にないんだけど、
 > みんなを納得させるほどの「結論」じゃない
と主張する根拠(ソース)は何よ?
クロージャって何がいいの? [転載禁止]©2ch.net
195 :デフォルトの名無しさん[sage]:2014/12/11(木) 21:30:20.83 ID:GpAyUabF
>>191
Swift スレの質問「Python が Swift や Ruby より劣ってるのは何か」に答えただけ
で、具体的に反論できないから罵倒を始めて Swift スレが荒れそうだったから、
こちらへ移動してきた


>>192
>>4 の定義において、局所環境やラムダ式は(クロージャという概念の構成要素であるけど)、
一般の言語だと直接的に対応する具象構文として存在していない(自分は知らない)
その書籍は読んでいないけど、おそらく Standard ML では "fn" <match> という具象構文を
「関数(function)」または「関数式(function expression)」と呼んでいると思う
で >>4 だと、その具象構文 "fn" <match> はクロージャに対応する

またクロージャ(日本語では「閉包」)という用語は馴染みづらいので、
クロージャの具象構文を指して(便宜的に)無名関数/匿名関数/ラムダ関数/ラムダ式/関数式 ...etc と
別名で呼ばれることがある:
・Standard ML では、単純に「関数」や「関数式」と呼ぶ
・JavaScript では、"ECMAScript Specification" では(SML と同様に)「FunctionExpression」と呼ばれ、
 サイ本では「関数リテラル」と呼ばれている
  ・13 関数定義 (Function Definition) -- Under Translation of ECMA-262 3rd Edition
    http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/13_Function_Definition.html
・Python では、その言語リファレンスで「ラムダ式」と呼ばれている:
  ・6. 式 (expression) ― Python 3.4.2 ドキュメント
   http://docs.python.jp/3.4/reference/expressions.html#lambda
くだすれPython(超初心者用) その25©2ch.net
152 :デフォルトの名無しさん[sage]:2014/12/11(木) 21:34:38.15 ID:GpAyUabF
>>147
ここは言語スレだから、Webプログラミングについては
WebProg板にある以下のスレで質問したほうがいいと思う
・【Python】Python Webフレームワーク総合スレ
 http://kanae.2ch.net/test/read.cgi/php/1329996601/
クロージャって何がいいの? [転載禁止]©2ch.net
197 :デフォルトの名無しさん[sage]:2014/12/11(木) 22:44:15.05 ID:GpAyUabF
調べてみると、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

まさに「みんなを納得させるほどの「結論」じゃない」というのは、こういう状況を指しているんだろね....
 http://peace.2ch.net/test/read.cgi/tech/1417333026/9
クロージャって何がいいの? [転載禁止]©2ch.net
199 :デフォルトの名無しさん[sage]:2014/12/11(木) 23:02:23.22 ID:GpAyUabF
>>196
ではクロージャ定義の引用元ソースを示そうね

答えは書籍「計算機プログラムの構造と解釈」、いわゆるSICP本だ
その中の節「3.2.1 評価の規則」に手続きオブジェクトが、いわゆるクロージャに対応する
 http://sicp.iijlab.net/fulltext/x321.html

そしてクロージャを視覚化したのが、
このページの図3.2にあるオタマジャクシの卵が2つ並んだ図形になる

単純な話だと思うけど、難しいかな?
クロージャって何がいいの? [転載禁止]©2ch.net
200 :デフォルトの名無しさん[sage]:2014/12/11(木) 23:27:50.83 ID:GpAyUabF
>>198
関数を宣言せずに書くという制約の元ですから、とてもPythonらしいコードだと思います
しかもループの代わりに関数再帰を使っているのですから、より関数型プログラミングらしいとも言えます

ただし、元々 Swift で書かれていたサンプルコードを各 LL へと書き直しているのですから、
もし以下の点を改善できれば(Pythonらしさという意味では)完璧でしょう:
・中間変数 f を宣言せず、リスト内包式の中にラムダ式をインラインで書く
・Swift のコードは辞書を使っているのですから、それを(勝手に)配列 digits へ改変せず、
 Python でも(Ruby や JavaScript と同様に)辞書を使って書く


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。