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

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

4 位/218 ID中時間01234567891011121314151617181920212223Total
書き込み数2000000000000000000211006



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
153
Swift part4 [転載禁止]©2ch.net
【Python】スクリプト バトルロワイヤル47【pl,rb,php,js】 [転載禁止]©2ch.net
クロージャって何がいいの? [転載禁止]©2ch.net
動的言語で大規模開発

書き込みレス一覧

Swift part4 [転載禁止]©2ch.net
158 :デフォルトの名無しさん[sage]:2014/12/10(水) 00:07:29.11 ID:veDvxwge
>>156
クロージャの定義は「ラムダ式と局所環境とを組合せた概念」です
詳しくは、以下のスレへのカキコを参照:
・クロージャって何がいいの?
 http://peace.2ch.net/test/read.cgi/tech/1415419907/4

もしも >>156 がクロージャ定義うんぬんの議論をご希望でしたら、
ここではスレ違いになるので、レスは上記のスレへカキコしてもらえると
嬉しいです
Swift part4 [転載禁止]©2ch.net
162 :デフォルトの名無しさん[sage]:2014/12/10(水) 00:46:20.46 ID:veDvxwge
>>161

>>158 と同じく(ここは Swift スレなんで、脱線はほどほどに....)
【Python】スクリプト バトルロワイヤル47【pl,rb,php,js】 [転載禁止]©2ch.net
8 :デフォルトの名無しさん[sage]:2014/12/10(水) 19:53:50.50 ID:veDvxwge
>>7
> いまだに結論は出ていない。

10年以上も前(2002年)に書かれた RHG(Ruby Hacking Guide)を引用して、
いったい何を主張したいのだろうか???(困惑)

・第8章 Ruby言語の詳細(節「ブロックローカル変数」を参照)
 http://i.loveruby.net/ja/rhg/book/spec.html
 
すでに結論は出て、Ruby 1.9 では仕様が追加されている
まったくいつものことながら、アンチ Ruby はレベルが低い
クロージャって何がいいの? [転載禁止]©2ch.net
189 :デフォルトの名無しさん[sage]:2014/12/10(水) 19:56:15.27 ID:veDvxwge
Swift スレでクロージャの話題で荒れそうだったので、こちらへ移動しとく
 http://peace.2ch.net/test/read.cgi/tech/1415860741/153

--
Swift や Ruby を含む多くの言語では常識であるけど Python では異なるものとして、
関数型言語に由来した(無名関数やラムダ式とも呼ばれる)クロージャがある
たとえば "The Swift Programming Language" の "Closure" の章にある map メソッドを使った
サンプルコードは、Ruby でも同じスタイルの良く似たコードで書き直せる:
 http://ideone.com/TsGD6B
これは Ruby だけでなく、JavaScript でも同じ
Swift や Ruby と比べて構文が簡潔な JavaScript ではいくらか冗長にはなるけれど、
何の苦もなく Swift と同じスタイルで書き直せる:
 http://ideone.com/74oNVU

同様に、「あるテーブルから特定の行だけを抽出し、加工して、集計する処理」は、
Swift だと table.filter { .... }.map { .... }.reduce { .... } とメソッドを連結(チェイン)させた式で書ける
これは Ruby なら table.select { .... }.map { .... }.inject { .... } と書き直せる
ここで、クロージャ内の ..... の部分には、上記のサンプルのように「任意の文(statements)が書ける」

もしかすると、いやこんなの高階関数のプログラミングを知っている人なら当たり前だろ、と感じるかもしれない
ところが Python だけはクロージャの本体に(任意の文ではなく)「式(expression)しか書けない」:
 http://ideone.com/tDaDkL  # --> Syntax Error になってしまう
だから、他の言語のクロージャに相当するコードを(名前のある)関数としてわざわざ宣言しなければならない:
 http://ideone.com/R7twCQ

結果として、Python は手続き型プログラミングであれば簡潔で可読性に優れたコードが書けるスクリプト言語だけれど、
関数型プログラミングには適さず、こうした関数型プログラミングは推奨されていないらしい(これを "酸っぱい葡萄" と言ふ)
 http://peace.2ch.net/test/read.cgi/tech/1345123070/70-71

これが Swift や Ruby 等と比較すると、関数型プログラミングで Python が劣る典型的な一例になる
Swift part4 [転載禁止]©2ch.net
165 :153[sage]:2014/12/10(水) 20:03:23.66 ID:veDvxwge
>>156,161
>>158 のクロージャ専用スレへ移動したので、
Swift とは関連しない事柄を議論したいなら移動してください:
 http://peace.2ch.net/test/read.cgi/tech/1415419907/189

クロージャの定義についても、要望があれば移動先で説明します
動的言語で大規模開発
822 :デフォルトの名無しさん[sage]:2014/12/10(水) 21:59:38.00 ID:veDvxwge
>>821
レスありはとうございました
たいへん面白い知見と考察でした

> CLU も ALGOLライクな for を意識して拡張した構文を考えたら似たものになった

わかりました、そう考えるのが自然ですね


> 通常の言語における「予約語」の性格は強いかもしれません。

内部ではメッセージングで実行している一方で、ALGOL 風の使いやすい for 構文に見せる....
いわゆる構文糖だと思いますが、この言語設計は Ruby と似ていますね(>>809)


> やはりブロック(当初はコンテキスト、後にクロージャー)の導入が契機だったと思います。

ブロックの導入によって、メッセージングによる計算モデル単純化の究極が Smalltalk-80 になった訳ですね
これは(Smalltalk-80 に影響を受けながらも)あえて ALGOL 風の複雑な構文の導入に向かった Ruby とは異なる道筋です


> そうです。繰り返しになりますが、外部イテレータとしての stream は -72 からあったので。

了解です
そういえば、ストリームをI/O処理だけでなくモジュールを組立てる基本要素とした手続き型言語がありました
・ストリームを扱う言語Stellaによる在庫管理システムの記述
 http://ci.nii.ac.jp/naid/110002761803


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