[#39464] Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

25 messages 2004/04/01
[#39608] Re: Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案 — pegacorn@... 2004/05/02

遅い反応&File.fnmatchは使った事ない&ruby-devの方では

[#39609] Re: Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案 — pegacorn@... 2004/05/02

File.fnmatch(と Dir.glob)をちょっと使ってみたのですが、

[#39610] Re: Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/05/02

山本です。

[#39611] Re: Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案 — matz@... (Yukihiro Matsumoto) 2004/05/02

まつもと ゆきひろです

[#39613] Re: Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案 — pegacorn@... 2004/05/02

From: matz@ruby-lang.org (Yukihiro Matsumoto)

[#39616] Re: Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案 — matz@... (Yukihiro Matsumoto) 2004/05/02

まつもと ゆきひろです

[#39620] Re: Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案 — pegacorn@... 2004/05/03

From: matz@ruby-lang.org (Yukihiro Matsumoto)

[#39621] Re: Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案 — matz@... (Yukihiro Matsumoto) 2004/05/03

まつもと ゆきひろです

[#39622] Re: Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案 — pegacorn@... 2004/05/03

From: matz@ruby-lang.org (Yukihiro Matsumoto)

[ruby-list:39522] Re: int/int in Ruby2?

From: "T Akutsu" <locrian@...>
Date: 2004-04-09 05:15:00 UTC
List: ruby-list #39522
こんにちは、あくつといいます。
#素人発言です。 (^^ )>>

    a,b は正の整数
    a - b は、a < b ならば、負の整数

    a,b は整数( b != 0 )
    a / b は、a % b != 0 ならば、有理数

    b は整数
    b ** a は、a が有理数ならば、実数

    Ruby は 1-3 で負の整数を生成する。
    Ruby は 1/3 で有理数を生成しない。
    Ruby は 3**(1/2) で実数を生成しない。# 3**(0) だから 1

    Ruby は、整数を整数の中に閉じ込めるから当然。
    AWK と比較。

$ cat n.awk 
BEGIN{
    for( i=1; i<=10; i++ ){
        printf("%d / %d = %f\n", i, 10, i / 10);
    }
    printf("%d**(%d/%d) = %f\n", 3, 1, 2, 3**(1/2));
    exit(0);
}
$ cat n.rb
BEGIN{
    1.upto(10){ |i|
        printf("%d / %d = %f\n", i, 10, i / 10)
    }
    printf("%d**(%d/%d) = %f\n", 3, 1, 2, 3**(1/2))
    exit(0)
}
$ gawk -f n.awk
1 / 10 = 0.100000
2 / 10 = 0.200000
3 / 10 = 0.300000
4 / 10 = 0.400000
5 / 10 = 0.500000
6 / 10 = 0.600000
7 / 10 = 0.700000
8 / 10 = 0.800000
9 / 10 = 0.900000
10 / 10 = 1.000000
3**(1/2) = 1.732051

$ ruby n.rb
1 / 10 = 0.000000
2 / 10 = 0.000000
3 / 10 = 0.000000
4 / 10 = 0.000000
5 / 10 = 0.000000
6 / 10 = 0.000000
7 / 10 = 0.000000
8 / 10 = 0.000000
9 / 10 = 0.000000
10 / 10 = 1.000000
3**(1/2) = 1.000000

$
    AWK ユーザーからすると、この結果は不気味です。
    int / int を再定義すれば AWK と同じにできますが。

$ cat real.rb

require 'rational'
class Fixnum
    alias _old_division /
    def / (obj)
        if obj.kind_of?(Integer) && (self % obj)!= 0
            Rational(self, obj)
        else
            self._old_division obj
        end
    end
end

class Bignum
    alias _old_division /
    def / (obj)
        if obj.kind_of?(Integer) && (self % obj)!= 0
            Rational(self, obj)
        else
            self._old_division obj
        end
    end
end

$ ruby -rreal.rb n.rb
1 / 10 = 0.100000
2 / 10 = 0.200000
3 / 10 = 0.300000
4 / 10 = 0.400000
5 / 10 = 0.500000
6 / 10 = 0.600000
7 / 10 = 0.700000
8 / 10 = 0.800000
9 / 10 = 0.900000
10 / 10 = 1.000000
3**(1/2) = 1.732051

$

    今からこれを標準とするのは難しいかなと思います。
    でも、「AWK と同じですよ」というのは言いやすいですね。


In This Thread