豊福@パパイヤです。

けいじゅさん
>>  下のような剰余系のプログラムを書いて一応動くの
>>ですがもっとうまい方法を教えて下さい。
> 
> 何か変わったことしていますね(^^;;;;

  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