From: ts Date: 2001-02-26T19:56:33+09:00 Subject: [ruby-talk:11581] Re: Array bugs? >>>>> "C" == Christoph Rippel writes: C> Ps. Could you send me your patch? - maybe I could C> take a look at it?. Anyway try ``your ruby'' on a C> couple of nasty potentially equal recursive arrays. If you can wait a little, I think that it's possible to write it as an extension (i.e. without modifying ruby). Actually I've tried to apply your first version with the difference that I make def include_pair a, b a, b = b, a if a > b @bag.push (a + (b << Fixnum::Maxlog)) end pigeon% cat b.rb #!./ruby ########################## # Examples ########################## p ([1,3,3,[3,4],"a"] == [1,3,3,[3,4],"a"]) p ([1,3,3,[3,4],"a"] == [1,3,3,[3,4],"b"]) ########################## a =[1,2,3]; a << a; b =[1,2]; b << b; a << a; b << a; p a - b; p a; p b ########################## def f(x); [x,x]; end def g(x); f f f f f f f f x; end def h(x); g g g g g g g g x; end def i(x); h h h h h h h h x; end def j(x); i i i i i i i x;end p (j(1) == j(1)) class UnOrderedPair def ==(other) return false unless other.kind_of? UnOrderedPair return true if id == other.id return true if (@l == other.l ) && (@r == other.r) return (@l == other.r ) && (@r == other.l) end def initialize(ll,rr) @l = ll; @r = rr end protected attr_reader :l, :r end ########################## # Examples ########################## l = [3,2,3]; r=[3,2] pl = UnOrderedPair.new l,r pr = UnOrderedPair.new r,l l << pl; r << pr p pl == pr ########################## pl = UnOrderedPair.new l,r pr = UnOrderedPair.new r,r l << pl; r << pr p pl == pr pigeon% pigeon% time b.rb true false [3] [1, 2, 3, [...], [...]] [1, 2, [...], [1, 2, 3, [...], [...]]] true true false real 0m16.827s user 0m16.690s sys 0m0.020s pigeon% Guy Decoux