- 260 名前:デフォルトの名無しさん mailto:sage [2014/12/15(月) 22:27:41.97 ID:eMlPsgxM.net]
- >>257
>そのブロック部分のみを扱うためにProcクラスもlambdaより先に実装されていて、 >そのProcを簡便に扱うためにlambdaと言う構文糖が後から出来た lambda はメソッドであって、構文糖ではない >>234 では「もちろん(lamda は)メソッド」と主張しているから、もしも同一人物のカキコなら矛盾している いったいどちらが正しいの? >イテレータ呼び出しを汎化した結果生まれたのが、ブロック付きメソッド呼び出し その「汎化」とは具体的には何を指しているのかな? もともとイテレータという概念と用語は手続き型言語 CLU で生まれ、Ruby でも採用された ただし CLU のイテレータは for ... in 構文というループ処理での利用に制限されたのに対して、 (クロージャとしての)ブロックを備えた Ruby ではループ処理以外にも利用できる形で「最初から設計された」 ・Rubyist のための他言語探訪 【第 2 回】 CLU magazine.rubyist.net/?0009-Legwork このためループ処理でもないのにイテレータ(iterator, 反復子)という用語は紛らわしいという声が挙り、 用語「イテレータ呼び出し」は「ブロック付きメソッド呼び出し」へと名称が「後から変更された」 つまり単に用語の命名が「後から」改められだけで、言語仕様の基本は「最初から」何も変わっていないはずです >RubyはOOPLとして設計され、それが主で関数型プログラミングは結果として付いてきた スマンが、いいかげん説明は面倒なので以下を読んでください ・Lisp から Ruby への設計ステップ yohshiy.blog.fc2.com/blog-entry-250.html ただし、もともとメソッド lambda は proc の別名で同じ意味でしたが、 1.8 の時代に lambda の挙動が変更されメソッドとして独立しました その変更の理由は関数型プログラミングと関連する可能性はありますが、詳しい背景を自分は知りません 言語仕様として「関数型プログラミング向けに後から追加/変更」されたのは、自分の記憶だとコレくらいしかありません
|

|