[#697] ++[Re: dylan [Re: swap values(Re: call by reference)]] —
けいじゅ@SHLジャパンです.
1 message
1996/10/01
[#869] Append Member — Kouki Higuchi <luke@...>
Please let me be a participate.
1 message
1996/10/20
[#895] sleep eternaly on BOW(Re: ruby 0.99.2-961023 available) — Shin-ichiro Hara <sinara@...>
原です。
6 messages
1996/10/24
[#906] [REQ]Get Strings!<3> GETS, SUB — Shin-ichiro Hara <sinara@...>
原です。
5 messages
1996/10/27
[#907] [REQ]Get Strings!<4> SPLIT — Shin-ichiro Hara <sinara@...>
原です。
6 messages
1996/10/27
[#920] bug report(each) — keiju@... (Keiju ISHITSUKA)
けいじゅ@SHLジャパンです.
8 messages
1996/10/29
[#928] Re: hajimemashite — Itsuro Saito <saito@...>
斎藤@東大電子情報です.
9 messages
1996/10/29
[#938] ruby 0.99.3-961030 available — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです.
7 messages
1996/10/30
[#954] Rational — keiju@... (Keiju ISHITSUKA)
けいじゅ@SHLジャパンです.
23 messages
1996/10/30
[#955] Re: Rational
— matz@... (Yukihiro Matsumoto)
1996/10/30
まつもと ゆきひろです.
[#968] Re: Rational
—
1996/10/31
けいじゅ@SHLジャパンです.
[#970] Re: Rational
— matz@... (Yukihiro Matsumoto)
1996/10/31
まつもと ゆきひろです.
[#956] Re: Rational[coerce(Re: ruby 0.99.3-961030 available) ] — Shin-ichiro Hara <sinara@...>
原です。
4 messages
1996/10/30
[#965] ruby-mode — Yasuo OHBA <jammy@...>
大庭@SHLJapanです.
6 messages
1996/10/31
[ruby-list:956] Re: Rational[coerce(Re: ruby 0.99.3-961030 available) ]
From:
Shin-ichiro Hara <sinara@...>
Date:
1996-10-30 09:36:05 UTC
List:
ruby-list #956
原です。
> まつもと ゆきひろです.
> 基本的にはそういうことです.つまりrubyの数値型システム(現状
> ではFixnum, Bignum, Float)に新しい数値型を追加した時の型変換
> の仕組みの話をしていたのでした.
そうでしたか。
> で,有理数クラスはだいたいできてるみたいです.スクリプト言語
> で有理数をだれが使うかと言うことはとりあえず置いておいて,練
おお!有理数を誰が使うって大勢が使いますよ!そもそも私が初めて
ruby の class を使ったのは、そして感激したのは、有理数のクラス
を作り、さらに複素数のクラスを作って、たんに並べただけで、自動
的に有理数成分の複素数が出来てしまったということです。
ちょっと長いけど日経 MIX に書いたのを引用すると、
---------^ RationalComplex_test1.rb
#!/usr/local/bin/ruby
class Complex
def initialize(x = 0, y = 0)
@re, @im = x, y
end
attr("re", 1); attr("im", 1)
def +(x); Complex.new(@re + x.re, im + x.im); end
def -(x); Complex.new(@re - x.re, im - x.im); end
def *(x)
Complex.new(@re*x.re - @im*x.im, @re*x.im + @im*x.re)
end
def to_s; "#@re+#{@im}i"; end
end
class Rational
def initialize(x = 0, y = 1)
@nu, @de = x, y
end
attr("nu", 1); attr("de", 1)
def gcd(x, y)
if y == 0 then x else gcd(y, x % y) end
end
def simplify
g = gcd(@nu, @de)
@nu /= g; @de /= g;
self
end
def +(x)
Rational.new(@nu*x.de + @de*x.nu, @de*x.de ).simplify
end
def -(x)
Rational.new(@nu*x.de - @de*x.nu, @de*x.de ).simplify
end
def *(x)
Rational.new(@nu*x.nu, @de*x.de).simplify
end
def /(x)
Rational.new(@nu*x.de, @de*x.nu).simplify
end
def to_s; "#@nu/#@de"; end
end
a = Rational.new(5,2)
b = Rational.new(113,355)
z = Complex.new(a, b)
d = Rational.new(31,21)
e = Rational.new(17,16)
w = Complex.new(d, e)
print "#{z} + #{w} = #{z+w}\n"
print "(#{z})*(#{w}) = #{z*w}\n"
---------$ RationalComplex.rb
> 5/2+113/355i + 31/21+17/16i = 167/42+7843/5680i
> (5/2+113/355i)*(31/21+17/16i) = 399859/119280+745771/238560i
雰囲気としては、群・環・体などの代数的「構造」は module を使って、
実数や有理数などの代数的「実体」は class を使って実現できる、とい
う感じでしょうか。#必ずしもそれだけではないか。
この「たんに並べただけ」でこれだけ面白いのだから、もし、
class Rational < Numeric
なんて継承が合理的な形で出来る様になるならばますます素晴らしいですね。
Shin-ichro Hara(Nagaoka Univ.of Tech.)