From: Nobuyoshi Nakada Date: 2008-02-03T14:42:23+09:00 Subject: [ruby-dev:33574] Re: rational, complex and nuby なかだです。 At Sun, 3 Feb 2008 11:10:45 +0900, Tadayoshi Funaba wrote in [ruby-dev:33573]: > このあたりは、ruby で書いてあるのですが、そこを見てないのだと思います。 > なかださんは、ソースを眺めてるだけで、動かしてはいないと思うのですが。 たしかに。lib/prelude.rbでしたか。 ちょっと見たところ、Enumerable#stable_sort_byがsortを使っている ので安定でないようです。 $ ./nuby -e 'a=[];%w[def abc def abc].each_with_index{|*e|a<f[0]}' [["abc", 1], ["abc", 3], ["def", 0], ["def", 2]] $ ./nuby -e 'a=[];%w[def abc def abc].each_with_index{|*e|a< > x.quotient(y) は x.quo(y).floor と精度を除いては等価ですか。 > > いえ。quotient (quot) は、Scheme (r5rs まで) のそれや、Common Lisp の > truncate のひとつ目の値、Smalltalk の quo と同様と考えます。なので > truncate のほうですかね。 なるほど、負の値で違いますね。 > > いや、そこまで削っちゃうのはどうかと思いますが。 > > んー、そうですか。Numeric#floor 必要ですか。Integer には要らないし、 > Rational や Complex にも適さないと思うのです。意味あるのは、Float だけ > じゃないですか。 Numeric#infinite? 同様、「Floatかどうかというのはあまり関係がな い」という気がします。それに、truncateはRationalにも追加されてい たりで、floorだけが不要というのはちょっと疑問を感じます。 > > Thread.criticalで動くので競合条件で動かないというのは正確ではな > > いですね。例外が起きたときにcriticalのままになってしまうのはすぐ > > 直るでしょうが、再入可能性とか内部でcriticalでなくなったりする可 > > 能性を考えると、バリアが必要になるはずです。 > > なかださんもほしいと思いつつ、手を出していないところを見ると難しですか > ね。少くとも現時点でこれを真剣につかおうと思う人はいないと思うので、当 > 面は放置しておこうかと思います。 実装上難しいというよりは、文法の拡張になるので記法のほうが問題で すね。あとは必要性と。(#...)では、今まではコメントだったものが有 効な式になってしまう点が気になります。また、二次的ですが、エディ タが混乱するというのもうれしくない点です。 ちなみに、私が考えていたのは、@{...}とかです。ライブラリとして必 要なものは、1.9では大体準備できているので、そのうち時間が空いた ら提案しようかとは思っていました。 > 僕としては、ruby でこんなこと出来たら面白いよね、ということを見せられ > れば十分だと思っているので。まあ、ほしいですが、ruby にも。 RationalやComplexの組込みは、リテラルも含めてまぁいいんじゃない かと思うのですが、mathnはどうでしょうねぇ。少なくとも、//演算子 にはいささか抵抗を感じます。たとえば string.split // などという ものがsyntax errorになってしまうこととか。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦