Non sono sicuro del motivo per cui pensi che il prodotto di due multiset debba essere un array. Ovviamente dovrebbe essere un multiset. Un multiset di coppie ordinate, per essere precisi.
Ruby non ha una rappresentazione prefabbricata di coppie ordinate (o più in generale tuple), quindi potresti fare una delle due cose:
- fornisci l'implementazione della tua coppia
- fai ciò che
Hash#each
fa e rappresenta coppie come matrici a due elementi
Credo che la seconda opzione sia la più sensata, quindi il tuo tipo di ritorno dovrebbe essere un MultiSet
di due elementi Array
s.
Ma neanche io sono convinto del tuo esempio di codice. Nel tuo esempio, stai implicando che
MultiSet.new([1, 1]) * MultiSet.new([1, 2])
e
{1, 1} * {1, 2} = {(1, 1), (1, 1), (1, 2), (1, 2)}
sono la stessa cosa, ma non lo sono!
MultiSet.new([1, 1]) * MultiSet.new([1, 2])
è uguale a
{[1, 1]} * {[1, 2]} = {([1, 1], [1, 2])}
e
{1, 1} * {1, 2} = {(1, 1), (1, 1), (1, 2), (1, 2)}
è uguale a
MultiSet.new(1, 1) * MultiSet.new(1, 2) ==
MultiSet.new([1, 1], [1, 1], [1, 2], [1, 2])