On 10/28/05, Darren Duncan <[EMAIL PROTECTED]> wrote: > One thing I would like to be able to do is this: > > @baz = cross([1,2],[3,4]); # yields ([1,3],[1,4],[2,3],[2,4]) > > And alternately, this: > > for cross([1,2],[3,4]) -> $foo,$bar { ... } # loop has 4 iterations
I already proposed this in this thread: http://groups.google.com/group/perl.perl6.language/browse_thread/thread/13f6317f6ca9229d/8046eddc50097a52?lnk=st&q=outer+product+luke+palmer&rnum=1#8046eddc50097a52 Where I called it "outer". Nowadays, instead of returning arrays, it probably returns tuples: for outer(1,2 ; 3,4) -> :($foo, $bar) {...} So that it can be well-typed[1]. > On the other hand, perhaps something I actually want is something > like the hyper-operation but with appropriately different syntax: > > ['a','b'] >>~<< ['c','d'] This was also discussed. The hot syntax at the time was: ('a','b') <<~>> ('c','d') But we decided against it for a reason I can't recall at the moment. For this, do: map -> :($a, $b) { $a ~ $b } outer(<a b> ; <c d>) Perhaps this could be written: map &infix:<~>, *<<outer(<a b> ; <c d>) But perhaps not. Luke [1] That is, if you had: for outer(1,2 ; "foo", "bar") -> :($foo, $bar) {...} The compiler could be sure that $foo is a Num and $bar is a Str.