豊福@パパイヤです。 けいじゅさん >> 下のような剰余系のプログラムを書いて一応動くの >>ですがもっとうまい方法を教えて下さい。 > > 何か変わったことしていますね(^^;;;; mathn.rb で / を再定義している路線をねらったん ですが。 >>(1) 元の +,-,*,/ を使って *,/ を再定義しているの ... >>(2) 最初は +,- も再定義していたのですが ... > Integer/Bignumそのものを剰余数にしちゃっていますね. これは, (2)でも話 > していますが, かなり無理があると思います. > > # いや, 無理があるというのと違うかな, 目的が剰余系なrubyを作りたいとい > # うなら別ですが... mathn.rb で分数電卓の気分で使えたように剰余系 電卓の気分で使えるようなものができないかというのが 目的です。 > 1. rubyのベースになる動作を根本的に変更しない. > 2. できるだけきれいに剰余系を表現したい. ... > module Modulo ... > end ... > rbc0> Modulo.def_modulo(3) > Modulo3 > # ここでクラスModulo3と関数Modulo3が定義されます. > > rbc0> v1 = Modulo3(10) > #<Modulo3: @value=1> > rbc0> v2 = Modulo3(2) > #<Modulo3: @value=2> > > rbc0> v1 + v2 > #<Modulo3: @value=0> うーん、興味深いですが、上にも書いたように 剰余系電卓の気分で使いたいのでやはり rbc0> 10 + 2 0 っぽく使いたいですね。 プログラムも def fib(n); a, b = 1, 1; for i in 1..n do; print "#{b} "; a, b = (a+b)*1, a; end; print "\n"; end; rbc0> fib(12) 1 1 2 3 5 8 13 21 34 55 89 144 というプログラム側を変更することなく rbc0> modulo(3) rbc0> fib(12) で 1 1 2 0 2 2 1 0 1 1 2 0 というようにしたかったんです。 > ># 剰余系での演算 > ># 合成数のケースはちょっと面倒なので後まわし > 合成数って何でしたっけ? えっ・・・、素数でも1でもない自然数のことです・・・。 前に書いたプログラムは 4 / 6 mod 10 みたいなやつに 対応してません。 --- 豊福@パパイヤ unbound / papaya.juice.or.jp toyofuku / juice.or.jp