# Spec of Rational

**URL:** <https://www.ruby-forum.com/t/spec-of-rational/129388>\
**Category:** Development\
**Created:** [February 18, 2008, 4:51am UTC](https://www.ruby-forum.com/t/spec-of-rational/129388 "2008-02-18T04:51:49Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Shin-ichiro\_HARA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/bbce88/32.png) [@Shin-ichiro\_HARA](https://www.ruby-forum.com/u/Shin-ichiro_HARA)\
**Post date:** [February 18, 2008, 4:51am UTC](https://www.ruby-forum.com/t/spec-of-rational/129388/1 "2008-02-18T04:51:49Z")

</div>

e$B86$G$9!#e(B

nurat-0.0.3 e$B$r85$K;O$a$?$$$H;W$$$^$9!#e(B

e$B$$$/$D$+;EMM$K$D$$$F$40U8+$r;G$$$?$$$N$G$9$,!"$^$:e(B

Rational(1, 1).integer?

e$B$Oe(B true e$B$+e(B false e$B$+!)e(Bfalse e$B$@$H$9$k$H!“J,Jl$,e(B 1  
e$B$G$”$k$H$-e(B true  
e$B$K$J$k=R8l$,M\_$7$$5$$,$9$k$N$G$9$,!"$=$N%a%=%C%IL\>$O2?$,NI$$$+!)e(B

---

<div class="post-metadata">

**Author:** ![Shin-ichiro\_HARA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/bbce88/32.png) [@Shin-ichiro\_HARA](https://www.ruby-forum.com/u/Shin-ichiro_HARA)\
**Post date:** [February 18, 2008, 1:58pm UTC](https://www.ruby-forum.com/t/spec-of-rational/129388/2 "2008-02-18T13:58:48Z")

</div>

> nurat-0.0.3 e$B$r85$K;O$a$?$$$H;W$$$^$9!#e(B

e$B$h$m$7$/$\*4j$$$7$^$9!#e(B

> Rational(1, 1).integer?
> 
> e$B$Oe(B true e$B$+e(B false e$B$+!)e(Bfalse e$B$@$H$9$k$H!“J,Jl$,e(B 1 e$B$G$”$k$H$-e(B true  
> e$B$K$J$k=R8l$,M\_$7$$5$$,$9$k$N$G$9$,!"$=$N%a%=%C%IL\>$O2?$,NI$$$+!)e(B

0.0.zero? #=\> true  
0.0.integer? #=\> false

e$B$$$&$3$H$G!"%/%i%9E\*$JLd$$$H;W$$$^$9$1$I!"?t3XE\*$JA0Ds$rCV$$$Fe(B  
rational? e$B$,e(B integer e$B$r4^$`$H$7$F$be(B integer? e$B$,e(B rational e$B$r4^$`$N$O87e(B  
e$B$7$/$J$$$G$9$+!#e(B

0.0.integer? e$B$,e(B true e$B$J$ie(B Ratinal(1,1).integer? e$B$be(B  
true e$B$G$$$$$h$&$J5$e(B  
e$B$,$7$^$9!#e(B

e$B8D?ME\*$K$Oe(B denominator == 1 e$B$GH=$k$7!"$H$/$Ke(B rational  
e$B$KI,MW$H$$$&$o$1e(B  
e$B$G$b$J$$$H;W$&$N$G!“e(Binteger?  
e$B$H:.F1$7$J$$$h$&$J!”$$$$L\>A0$,$"$l$Pe(B  
Numeric e$B$H$7$F2?$+JL$KMQ0U$5$l$F$$$F$b$$$$$h$&$J5$$,$7$^$9!#e(B

---

<div class="post-metadata">

**Author:** ![Shin-ichiro\_HARA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/bbce88/32.png) [@Shin-ichiro\_HARA](https://www.ruby-forum.com/u/Shin-ichiro_HARA)\
**Post date:** [February 19, 2008, 4:46am UTC](https://www.ruby-forum.com/t/spec-of-rational/129388/3 "2008-02-19T04:46:00Z")

</div>

e$B86$G$9!#e(B

Tadayoshi F. e$B$5$s$O=q$-$^$7$?e(B:

> > nurat-0.0.3 e$B$r85$K;O$a$?$$$H;W$$$^$9!#e(B
> 
> e$B$h$m$7$/$\*4j$$$7$^$9!#e(B

nurat-0.0.4 e$B$r85$K$9$k$3$H$K$7$^$7$?!#e(B

> e$B$7$/$J$$$G$9$+!#e(B  
> e$B$=$&$G$9$M!#e(Bfloat? e$B$H$+L5$$$3$H$r9M$($k$H!"e(Binteger?  
> e$B$O!“e(BFixnum e$B$He(B  
> Bignum e$B$r$^$H$a$k$3$H$K0U5A$,$”$k$\_$?$$$G$9$M!#e(B

> e$B8D?ME\*$K$Oe(B denominator == 1 e$B$GH=$k$7!"$H$/$Ke(B rational e$B$KI,MW$H$$$&$o$1e(B  
> e$B$G$b$J$$$H;W$&$N$G!“e(Binteger? e$B$H:.F1$7$J$$$h$&$J!”$$$$L\>A0$,$"$l$Pe(B  
> Numeric e$B$H$7$F2?$+JL$KMQ0U$5$l$F$$$F$b$$$$$h$&$J5$$,$7$^$9!#e(B

integral? e$B$G!"$I$&$G$7$g$&!#e(BNumeric e$B$KMQ0U$9$k$N$G$O$J$/$F!"e(B  
Integer e$B$He(B Rational e$B$KMQ0U$9$l$P==J,$+$b!#e(B

> e$B8D?ME\*$K$Oe(B denominator == 1 e$B$GH=$k$7!"$H$/$Ke(B rational e$B$KI,MW$H$$$&$o$1e(B  
> e$B$G$b$J$$$H;W$&$N$G!"e(B

r.integral? ? r.to\_i : r e$B$H$+=q$1$k$7!"JXMx$8$c$J$$$+$J!#e(B

---

<div class="post-metadata">

**Author:** ![Shin-ichiro\_HARA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/bbce88/32.png) [@Shin-ichiro\_HARA](https://www.ruby-forum.com/u/Shin-ichiro_HARA)\
**Post date:** [February 19, 2008, 4:47am UTC](https://www.ruby-forum.com/t/spec-of-rational/129388/4 "2008-02-19T04:47:46Z")

</div>

e$B86$G$9!#e(B

inspect e$B$O$I$&$7$^$7$g$&!#e(B

[Rational(1,2).to\_s, Rational(1,2).inspect] e$B$O!“A0$Oe(B  
[“Rational(1, 2)”, “Rational(1, 2)”] e$B$G$7$?$,!”;d$,$\*4j$$$7$Fe(B  
[“1/2”, “Rational(1, 2)”] e$B$K$7$F$b$i$$$^$7$?!#K\Ev$O!“e(B  
[“1/2”, “1/2”]  
e$B$K$7$F$[$7$+$C$?$N$@$1$I!”@PDM$5$s$K$"$($J$/5Q2\<$5$l$^$7e(B  
e$B$?!#:#2s!"$U$J$P$5$s$Ne(B nurat e$B$G$O!"e(B[“1/2”, “(1/2)”]  
e$B$H$J$C$F$$$^$9!#e(B  
nurat e$B\<0$O$?$V$s$^$?@PDM$5$s$,e(B NG e$B$r=P$9$H;W$$$^$9!#e(B

e$B$I$&$7$^$7$g$&!#e(B

"#\<1/2\>“e$B$H$$$&$N$b$”$k$i$7$$$1$I!#e(B

---

<div class="post-metadata">

**Author:** ![Shin-ichiro\_HARA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/bbce88/32.png) [@Shin-ichiro\_HARA](https://www.ruby-forum.com/u/Shin-ichiro_HARA)\
**Post date:** [February 19, 2008, 1:10pm UTC](https://www.ruby-forum.com/t/spec-of-rational/129388/5 "2008-02-19T13:10:26Z")

</div>

> integral? e$B$G!"$I$&$G$7$g$&!#e(BNumeric e$B$KMQ0U$9$k$N$G$O$J$/$F!"e(B  
> Integer e$B$He(B Rational e$B$KMQ0U$9$l$P==J,$+$b!#e(B
> 
> > e$B8D?ME\*$K$Oe(B denominator == 1 e$B$GH=$k$7!"$H$/$Ke(B rational e$B$KI,MW$H$$$&$o$1e(B  
> > e$B$G$b$J$$$H;W$&$N$G!"e(B
> 
> r.integral? ? r.to\_i : r e$B$H$+=q$1$k$7!"JXMx$8$c$J$$$+$J!#e(B

e$B$=$NNc$+$i$9$k$H!“MxMQ\<T$KK\<AE\*$G$J$$$H$3$m$G$N\>.:Y9)$r4+$a$F$k$h$&$Je(B  
e$B46$8$,$9$k$s$G$9$,!#$=$&$@$H$9$k$H!”$=$&$$$&0U?^$GF3F~$9$k$N$O$"$^$j$he(B  
e$B$/$J$$$+$b$7$l$^$;$s!#e(B

e$B$h$jD\>@\E\*$Je(B unify  
e$B$\_$?$$$J%a%=%C%I$b9M$($i$l$k$1$I!"$3$l$b$$$^$R$H$D!#e(B

---

<div class="post-metadata">

**Author:** ![Shin-ichiro\_HARA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/bbce88/32.png) [@Shin-ichiro\_HARA](https://www.ruby-forum.com/u/Shin-ichiro_HARA)\
**Post date:** [February 20, 2008, 4:47am UTC](https://www.ruby-forum.com/t/spec-of-rational/129388/6 "2008-02-20T04:47:38Z")

</div>

e$B86$G$9!#e(B

Tadayoshi F. e$B$5$s$O=q$-$^$7$?e(B:

> > integral? e$B$G!"$I$&$G$7$g$&!#e(BNumeric e$B$KMQ0U$9$k$N$G$O$J$/$F!"e(B  
> > Integer e$B$He(B Rational e$B$KMQ0U$9$l$P==J,$+$b!#e(B
> > 
> > > e$B8D?ME\*$K$Oe(B denominator == 1 e$B$GH=$k$7!"$H$/$Ke(B rational e$B$KI,MW$H$$$&$o$1e(B  
> > > e$B$G$b$J$$$H;W$&$N$G!"e(B  
> > > r.integral? ? r.to\_i : r e$B$H$+=q$1$k$7!"JXMx$8$c$J$$$+$J!#e(B
> 
> e$B$=$NNc$+$i$9$k$H!“MxMQ\<T$KK\<AE\*$G$J$$$H$3$m$G$N\>.:Y9)$r4+$a$F$k$h$&$Je(B  
> e$B46$8$,$9$k$s$G$9$,!#$=$&$@$H$9$k$H!”$=$&$$$&0U?^$GF3F~$9$k$N$O$"$^$j$he(B  
> e$B$/$J$$$+$b$7$l$^$;$s!#e(B

e$B$&!\<$`!#e(Bmathne$BGI$N$U$J$P$5$s$K0-$$Nc$r=P$7$A$c$C$?$+$J$"!#;d$bMxMQ\<T$K\>.e(B  
e$B:Y9)$r4+$a$k$N$ONI$/$J$$$H;W$&$1$I!"$$$m$$$m$J%i%$%V%i%j$N:n\<T$bMxMQ\<Te(B  
e$B$N0lIt$J$N$G!"$$$$$s$8$c$J$$$+$J!#e(B

e$B$^$?!“7kO@$,!Ve(Bx  
e$B$O@0?t$G$”$k!#!W$H$$$&%?%$%W$NDjM}$,?t3X$K$A$i$[$i$"$ke(B  
e$B$0$i$$$G!"@0?t$+$I$&$+$H$$$&$N$O!"=EMW$J=R8l$@$H;W$$$^$9!#$=$7$F!“e(Bx  
e$B$,e(B  
e$B@0?t$G$”$k$+$I$&$+$rD4$Y$k$N$K!"e(B

x.denominator == 1

e$B$H=q$/$N$O$I$&$b;Q$,$h$/$J$$!#$b$7$+$9$k$H!"e(B

x.denominator == 1 || x.denominator == -1

e$B$H$9$Y$-$+$b$7$l$J$$$7!"$"$k$$$Oe(B

(x.numerator % x.denominator).zero?

e$B$H$9$Y$-$+$b$7$l$J$$!#$=$3$O\<BAu$NET9g$K$+$+$o$k$N$G!"1#$7$?$$e(B  
e$B$H$3$m$G$9!#$3$3$O$R$H$De(B

x.integral?

e$B$G$$$+$,!)$b$C$H$$$$L\>A0$,$"$k$+$J!#e(B

> e$B$h$jD\>@\E\*$Je(B unify e$B$\_$?$$$J%a%=%C%I$b9M$($i$l$k$1$I!"$3$l$b$$$^$R$H$D!#e(B

unifye$B$H$$$&$N$O$I$&$$$&%a%=%C%I$G$9$+!)e(B

---

<div class="post-metadata">

**Author:** ![Shin-ichiro\_HARA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/bbce88/32.png) [@Shin-ichiro\_HARA](https://www.ruby-forum.com/u/Shin-ichiro_HARA)\
**Post date:** [February 20, 2008, 1:52pm UTC](https://www.ruby-forum.com/t/spec-of-rational/129388/7 "2008-02-20T13:52:13Z")

</div>

> e$B$^$?!“7kO@$,!Ve(Bx e$B$O@0?t$G$”$k!#!W$H$$$&%?%$%W$NDjM}$,?t3X$K$A$i$[$i$"$ke(B  
> e$B$0$i$$$G!"@0?t$+$I$&$+$H$$$&$N$O!"=EMW$J=R8l$@$H;W$$$^$9!#$=$7$F!“e(Bx e$B$,e(B  
> e$B@0?t$G$”$k$+$I$&$+$rD4$Y$k$N$K!"e(B

e$B$=$3$OH]Dj$7$^$;$s!#\<l99=EMW$H$b;W$$$^$;$s$,!"$$$$L\>A0$,$"$l$P!"e(B  
Numeric e$B0lBN$G9M$($l$P$$$$$H;W$$$^$9!#86$5$s$,M\_$7$$$N$O!"e(Bscheme  
e$B$Ne(B  
integer?  
e$B$K6a$$$H;W$&$s$G$9$,!“L\>A0$,Ho$C$F$k$N$G!”$b$&;}$C$F$3$l$^$;e(B  
e$B$s$7!#e(B

> unifye$B$H$$$&$N$O$I$&$$$&%a%=%C%I$G$9$+!)e(B

e$BL\>A0$OC1$K@PDM$5$s$Ne(B Unify  
e$B$r;X$7$F$$$k$@$1$G!"$$$$2C8:$G$9$,!"$\*$h$=e(B  
e$B$3$s$J46$8$G$9$+$M!#JL$KI,MW$H$O;W$C$F$$$^$;$s!#e(B

class Numeric  
def unify() self end  
end

class Rational  
def unify() if denominator == 1 then numerator else self end; end  
end

class Complex  
def unify() if image == 0 then real else self end; end  
end
