Quale sarebbe il tipo di ritorno di un prodotto cartesiano di un multiset

0

Sto scrivendo un Multiset in Ruby. L'unione, operazioni di intersezione dove semplice e restituire un MultiSet. Ma, non sono sicuro di quale dovrebbe essere il tipo di ritorno del prodotto cartesiano, dovrei restituire una serie di tuple? è una bella api?

 MultiSet.new([1,1]) * (MultiSet.new([1,2])

In Math è

{1,1}*{1,2} = {(1,1),(1,1),(1,2),(1,2)}
    
posta archie 19.10.2014 - 01:13
fonte

1 risposta

3

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])
    
risposta data 19.10.2014 - 14:06
fonte

Leggi altre domande sui tag