Question about the Set class, XOR, and arrays

D

Daniel Berger

Hi all,

Ruby 1.8.5

irb(main):002:0> Set[1,2,3] ^ Set[3,4,5,5]
=> #<Set: {5, 1, 2, 4}>

Ok, looks good.

irb(main):003:0> Set[1,2,3] ^ [3,4,5,5]
=> #<Set: {1, 2, 4}>

What?! I'm confused. Do I need a refresher in Set theory or something?

Thanks,

Dan
 
R

Ryan Davis

irb(main):002:0> Set[1,2,3] ^ Set[3,4,5,5]
=> #<Set: {5, 1, 2, 4}>

Ok, looks good.

irb(main):003:0> Set[1,2,3] ^ [3,4,5,5]
=> #<Set: {1, 2, 4}>

What?! I'm confused. Do I need a refresher in Set theory or something?

It is the way it is implemented... subsequent 5's will toggle it on
and off. You should file a bug.
 
J

Joel VanderWerf

Daniel said:
Hi all,

Ruby 1.8.5

irb(main):002:0> Set[1,2,3] ^ Set[3,4,5,5]
=> #<Set: {5, 1, 2, 4}>

Ok, looks good.

irb(main):003:0> Set[1,2,3] ^ [3,4,5,5]
=> #<Set: {1, 2, 4}>

What?! I'm confused. Do I need a refresher in Set theory or something?

I think I can guess why it is happening:

irb(main):009:0> (0..10).each {|n| p Set[1,2,3] ^ ([3,4]+[5]*n)}
#<Set: {1, 2, 4}>
#<Set: {5, 1, 2, 4}>
#<Set: {1, 2, 4}>
#<Set: {5, 1, 2, 4}>
#<Set: {1, 2, 4}>
#<Set: {5, 1, 2, 4}>
#<Set: {1, 2, 4}>
#<Set: {5, 1, 2, 4}>
#<Set: {1, 2, 4}>
#<Set: {5, 1, 2, 4}>
#<Set: {1, 2, 4}>
=> 0..10

Looks like the array argument is used to flip-flop the elements of the set.
 
D

Daniel Berger

Ryan said:
irb(main):002:0> Set[1,2,3] ^ Set[3,4,5,5]
=> #<Set: {5, 1, 2, 4}>

Ok, looks good.

irb(main):003:0> Set[1,2,3] ^ [3,4,5,5]
=> #<Set: {1, 2, 4}>

What?! I'm confused. Do I need a refresher in Set theory or something?

It is the way it is implemented... subsequent 5's will toggle it on
and off. You should file a bug.

Done.

Thanks for confirming my sanity.

- Dan
 
J

Joel VanderWerf

Jeffrey said:
Daniel said:
Ryan said:
On Nov 1, 2006, at 12:25 PM, Daniel Berger wrote:

irb(main):002:0> Set[1,2,3] ^ Set[3,4,5,5]
=> #<Set: {5, 1, 2, 4}>

Ok, looks good.

irb(main):003:0> Set[1,2,3] ^ [3,4,5,5]
=> #<Set: {1, 2, 4}>

What?! I'm confused. Do I need a refresher in Set theory or something?
It is the way it is implemented... subsequent 5's will toggle it on
and off. You should file a bug.

Done.

Thanks for confirming my sanity.

In what way is this a bug? I'm not aware of set theory saying anything
about the intersection of a set with an array.

Arrays already behave like sets in some ways. They have set-like operators:

irb(main):009:0* [1,2,3] & [2,3,4]
=> [2, 3]
irb(main):010:0> [1,2,3] | [2,3,4]
=> [1, 2, 3, 4]
irb(main):011:0> [1,2,3] - [2,3,4]
=> [1]

But this argument falls down because arrays don't have symmetric difference:

irb(main):012:0> [1,2,3] ^ [2,3,4]
NoMethodError: undefined method `^' for [1, 2, 3]:Array
from (irb):11
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,216
Messages
2,571,120
Members
47,723
Latest member
Monika9748

Latest Threads

Top