On Tue, 14 Jun 2005 07:19:09 -0700, Mark A. Biggar <[EMAIL PROTECTED]> wrote: > Luke Palmer wrote: >> On 14 Jun 2005 06:07:10 -0000, David Formosa (aka ? the Platypus) >> <[EMAIL PROTECTED]> wrote:
>>>multi sub infix_circumfix_meta_operator:{'>>','<<'} (Hash %a,Hash %b,Code >>>$op) { >>> my Hash %return; >>> for intersection(keys %a,keys %b) -> $key { >>> %return{$key} = $op($a{$key},$b{$key}); >>> } >>> return %return; >>>} >>> >>> Would this be sensible, usefull behavour? >> [...] The difference between >> the hyper hash ops and vector-vector ops in my class is the fact that >> you did intersection instead of union (I assumed unset elements were >> 0). Unfortunately, such an assumption doesn't make sense on a general >> scale, so I wonder whether I would end up using the hash hyper ops or >> whether I'd just go and implement them again. >> >> So, I'd really like to see a couple examples where this behavior could >> be useful. I don't doubt that it can, but I can't think of anything >> at the moment. > > This is effectively the Database inner vs outer join issue. There are > times you need one and times you need the other. Example for the outer > join case: combining two invoices where you want to add together the > subtotals for each type of item and missing items on either invoice > should be assumed to be 0 quantity at 0 dollars. > Note that just like in > the reduce op you need to know the identity value associated with the > op. come to think of it just like in the DB world you really need 4 > different versions: inner join (intersection of keys), full outer join > (union of keys) and the left and right outer joins where you on consider > the missing keys on the left or right sides. If you consider arrays to be hashes keyed by integers then @a >>..<< @b does the equiverlent of an inner join. I would suggest that if we are going to have outer join versions then we have something like this >>...<< inner joing hyperop >>>...<< left outer joing hyperop >>...<<< right outer joing hyperop >>>...<<< full outer joing hyperop > This means that the current > hyper-op should be define to be one of inner or full and we need some > syntax to specify the other three op types. >>-:left<< Ugh! I think my syntax is slightly less ugly. -- Please excuse my spelling as I suffer from agraphia. See http://dformosa.zeta.org.au/~dformosa/Spelling.html to find out more. Free the Memes.