作者: 機械伯爵
日時: 2004/3/13(03:09)
 機械です。

>| lambda無いし・・・(泣)
>
>lambdaありますよ、昔から。

 申し訳ありません。

 索引に無かったんで、見落としてました。

 確かにありますね・・・えっと、Proc.newと同義です
ね。

 でもコレって、Pythonのlambdaとえらく雰囲気違いま
すね・・・

※Schemeとかのlambdaとも違うなぁ・・・

 例えばPythonだと、lambdaを用いて階乗計算(すみま
せんPythonブースの使いまわしです)を・・・

f = lambda x:(x and f(x-1)*x)or 1

 とか書けるんですが、Rubyだとブロックの中からreturn
できませんから、lambdaを使ってこういう書き方は想定さ
れていませんね(まぁ、Pythonでもあまり推奨されていな
い書き方ですし・・・)

 再帰だと・・・

def f(x)
  if x == 0
    return 1
  else
    return f(x-1) * 1
  end
end

 ですから、Pythonで書くと・・・

def f(x):
  if x == 0:
    return 1
  else:
    return f(x-1) * 1

 といった感じでしょうか。

>| オブジェクトについては、C++もSmalltalkもJavaも一応は書けるので(何より
>Pythonですが)使いまくっていますが、Pythonの気楽なファジーオブジェクトにな
れ
>ると、制限の多い他のオブジェクトはいじるのが結構面倒です。
>
>Rubyも十分ファジーだと思うんだけど。

 まぁ、オブジェクトフィールドを直接外から操作でき
たり、

def function():
  return 100

class Class:
  pass

x = function, Class
a, b = x[0](), x[1]()

 みたいに、関数名はおろかクラス名まで無造作にオブ
ジェクトとして放り込んで使ったりするあたりは、ファ
ジーなオブジェクト指向というよりむしろLisp系のファー
ストクラスプロシージャまで混在した乱暴な設計ですの
で、これから比べれば、Rubyはやはりかなり「行儀の良
い」オブジェクト指向言語だと思います。

※Smalltalkでも、メッセージまではオブジェクトになら
  なかった筈ですし・・・

 実際、関数オブジェクトやクラスオブジェクトの存在
は、演算子をシンボルとして扱えるLispの抽象度に近く
なるということで、便利ではあるものの若干理解しにく
くなるという危険性を否めません。

 ただ、ソレがあるプログラミング環境に自分の思考が
慣れきっているため、少しリハビリする必要があるよう
です。

   /機械伯爵/