class Modulo(n=0, m=13) { method init { (n, m) = (n % m, m) } method to_n { n } < + - * ** >.each { |meth| Modulo.def_method(meth, method(n2) { Modulo(n.(meth)(n2.to_n), m) }) } method to_s { "#{n} 「mod #{m}」" } } func f(x) { x**100 + x + 1 } say f(Modulo(10, 13))