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

 まず最初に・・・言い方がまずかったのならあやまります
が、貶める云々のつもりは全くありません。

 言いたい時には直接言います、あたしゃ。

> | でもコレって、Pythonのlambdaとえらく雰囲気違いま
> |すね・・・
> 
> それはPythonのlambdaが違うんだと思います。

 はい、そう言ってます。

 いろんな制限のあるPythonのlambdaはかなり特殊だと思います。

※だから「普通の」とは言わず、わざわざ「Pythonの、」と言った
 つもりなんですが・・・
 
> 想定されてないとおっしゃいますが、ちゃんと
> 
> f = lambda{|x|(x > 0 and f.call(x-1)*x)or 1}
> 
> と書けますし、想定内だと思います。。違いはlambdaで作った関数
> を呼ぶ時にcallメソッドを使わなければならない点と、0は偽でな
> い点ですから、本質的ではないと思います。

 失礼しました。

 Pythonでは「値を持つ式に限定されたからこそ、明示的にreturnを書かない」ため、returnが書けない時点で値を返さないのかと思いました(ちょっと例を見てもわからなかったので)
 
> むしろ、RubyにはPythonのように「lambda本体は式でなければなら
> ない」という限定がありませんから、andやorを使った不自然な記
> 述をしなくても

 Pythonのand,orを使った記述は裏技的で、私も初め戸惑いましたので、不自然な記述なのはまちがいありません。

> と書けます。また、Rubyは1.8からlambda内でreturnが使えますか

 私の持っているRubyが古かったため、returnでエラーがでたようですね。

 ただこの場合、returnを書かないと、式評価されたものがどう扱うかは(私には)わかりにくいので、(私なら)returnを書きたいところです。
 
> | まぁ、オブジェクトフィールドを直接外から操作でき
> |たり、
> 
> instance_evalを使えば外から操作できます。Pythonに比べて面倒
> なのはわざとです。

 はい、ですから「直接」と言っています(直接、というのは、見たまんまの簡単な方法で、といったニュアンスで言ったつもりだったのですが、通じていなければ申し訳ありませんでした)

 カプセル化についてどう言語に取り込むかについては、言語としてのスタイルが違うだけということは存じています。

 RubyはRubyの、PythonはPythonの基準でそれぞれ簡単な記述をとったり、面倒な基準を採用したりしている筈ですよね(Pythonでいうと、文と式の明確な区別や明示的なselfポインタあたりは、他言語ユーザからは不必要に思えるほど回りくどい方法がなされていると思います)
 
> これもできます。Rubyでもクラスはオブジェクトですから。ただ、
> Pythonと違ってfunctionとclassが両方callableというわけではな
> いので、見かけは違うでしょうけど。

 classはできるんですか・・・う〜ん、私がやってエラーが出たのは、なんか書き間違えたのかもしれませんね。これも大変失礼しました。

 これは純粋に質問ですが、Ruby普通の関数は確かオブジェクトでないので、ブロックを作る、といった記述があったかと思います。

 Pythonではdefで作ろうがlambdaで作ろうが関数はオブジェクトなのですが、Rubyではオブジェクト型の関数(メソッド?)とそうでない関数(メソッド)があるのはどういうわけでしょう?

 特にLispも気に入っておられると書かれていたように記憶していますので、関数は一括オブジェクトとして扱ってもおかしくないと思うのですが・・・

 もしかして、言語仕様というより、実行効率とかの理由なのでしょうか?

> | ただ、ソレがあるプログラミング環境に自分の思考が
> |慣れきっているため、少しリハビリする必要があるよう
> |です。
> 
> 「Pythonが好き」とか「Pythonに慣れている」とか「移行は面倒」
> というのはどれも理解できるのですが、事実に基づかないことで貶
> めるのはフェアじゃないと思います。

 私の理解が浅くて不当な評価を書いてしまったことには謝罪いたします。

 ただ今回は、本気である程度使えるようにしたいと勉強しているので(苦労してますが)両立させるためにはどんな概念の違いがあるかはっきりさせておきたかったということがあり、ある程度暴走したことはお許しください。

 また「できない」と書いたことについては、考慮されていないとかいった意味ではなく、PythonとRubyのスタイルの違いでできないのか、と早合点したのと、実際に自分で書いて動かなかったため、出来ないと判断してしまったことにあります。

 やはり実装が古すぎるようですので、至急に新しい実装を手に入れたいと思います。

 前にも書いたかと思いますが、言語の優劣などといった宗教論議は私もごめんです。

 比較は理解のためですし、色々な考え方を吸収したいためです。

 私の書き方はどうも喧嘩腰に見えたり、嘲笑的に見えたりするようですので気をつけてはいるのですが、まだまだ書き方が稚拙ゆえお気に障ったかと思います。

 申し訳ありません。

 ただ、口を閉ざすことはいたしませんので、お許しください。

   /機械伯爵/