Updated the library with that. The only downside that I can see is that flattening, as I had always planned but finally bothered to do, has no way to tell if the left tuple was the produce of a previous cartesian product operation. Small price to pay and all that. Thanks for the insight!
On Fri, Dec 18, 2015 at 8:19 PM, T.J. Usiyan <[email protected]> wrote: > That is… damned nice. I choose not to feel that bad about it… for reasons. > > > > On Fri, Dec 18, 2015 at 8:04 PM, Dave Abrahams <[email protected]> > wrote: > >> >> On Dec 18, 2015, at 4:35 AM, Al Skipp via swift-evolution < >> [email protected]> wrote: >> >> On 18 Dec 2015, at 00:19, T.J. Usiyan via swift-evolution < >> [email protected]> wrote: >> >> With a Cartesian Product type [like this]( >> https://github.com/griotspeak/CartesianProduct), the for-in-where syntax >> actually gets us to list comprehensions. I'll admit that I might not have >> implemented the best Cartesian Product type possible, but it should >> illustrate that we have what we need. >> >> `for case … in cartProd(cartProd(seq1, seq2), seq3) // An operator for >> cartProd would make it more pleasing to read.` >> >> >> That’s impressive work, but it strikes me as quite a difficult >> undertaking to get there. (Is it just me, or are generators and sequences >> the most scary part of Swift?) Also, is it possible to get it working as an >> expression, or is it restricted to a ‘for’ statement? If it can only be >> performed as a ‘for’ statement it will still need an external mutable var >> to be updated outside of the loop. It’s fine if you want to just do >> side-effecty things, like print the elements, but I’d consider the ability >> to return a value to be more important. >> >> >> This is a much simpler cartesian product implementation: >> >> seq1.flatMap { x in seq2.map { (x,$0) } } >> >> or, if you want speed, >> >> seq1*.lazy*.flatMap { x in seq2*.lazy*.map { (x,$0) } } >> >> HTH, >> >> -Dave >> >> >> >> >
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
