- 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
|