> On Dec 18, 2015, at 5:46 PM, T.J. Usiyan <[email protected]> wrote:
> 
> 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.

Not sure what that means, I’m afraid.

> Small price to pay and all that. Thanks for the insight!

Glad to help.

> On Fri, Dec 18, 2015 at 8:19 PM, T.J. Usiyan <[email protected] 
> <mailto:[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] 
> <mailto:[email protected]>> wrote:
> 
>> On Dec 18, 2015, at 4:35 AM, Al Skipp via swift-evolution 
>> <[email protected] <mailto:[email protected]>> wrote:
>> 
>>> On 18 Dec 2015, at 00:19, T.J. Usiyan via swift-evolution 
>>> <[email protected] <mailto:[email protected]>> wrote:
>>> 
>>> With a Cartesian Product type [like 
>>> this](https://github.com/griotspeak/CartesianProduct 
>>> <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
> 
> 
> 
> 
> 

-Dave



_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to