From: Takaaki Tateishi Date: 2002-07-22T01:17:28+09:00 Subject: [ruby-dev:17756] Re: self in block At Sun, 21 Jul 2002 23:55:16 +0900, Yukihiro Matsumoto wrote: > |それは関数に対するYコンビネータが実現できるからではないでしょうか? > |そして,一つYコンビネータを定義しておけば十分ですよね. > > そうかなあ。Yコンビネータを使ったLispプログラムなんて教科書 > 以外で見たことないんですけど。それは私が知らないだけ? そうですね… まずYコンビネータを使った例はないと思います. 大抵Yコンビネータが使えることを知っていても関数を定義して使うと いう方が一般的なのは同意します.もちろん,RubyにおいてもAkrさん が指摘したように定義してから使うことの方が多いというのも理解で きます. ary = [Foo.new, Foo.new, ...] ary.sort{|a,b| a,bが再帰的な構造を持っているので再帰処理 } ということを,したいことも*たまに*あるんですが,結局,どこかで, class Foo def compare(other) ... end end としてメソッドを定義して, [...].sort{|a,b| a.compare(b) } とかしますね.そういうメソッドを持つべきという場合が多いと思い ます(sortの場合はほとんどそうだと思います)が,消極的に定義して から使うという場合もあるかと思います.なので,schemeにしろ他の 関数型言語とかにしろ,まず見かけないだけで実は使いたい場面はあ るんじゃないかと. さらに,関数型言語とかだと,let..in...などの構文で変数(特に関数) を局所化して使ったりするので,特にそういう需要もないのだと思います. # 終りにしようと思いつつも書いてしまう… (^^; -- Takaaki Tateishi