[swift-users] Need better name, want to hide generator

Erica Sadun erica at ericasadun.com
Sat Dec 19 18:20:51 CST 2015

Here's what I ended up with. (The use-case for this ended up being light-weight game tile placement, not image processing or anything. )

func cartesianProduct<S1: SequenceType, S2: SequenceType>(s1: S1, _ s2: S2) -> AnySequence<(S1.Generator.Element, S2.Generator.Element)> {
    let items = s1.lazy.flatMap({
        item1 in s2.lazy.map({
            item2 in (item1, item2)})})
    return AnySequence {items.generate()}

func cartesianProduct<S1: SequenceType, S2: SequenceType, S3: SequenceType>(s1: S1, _ s2: S2, _ s3: S3) -> AnySequence<(S1.Generator.Element, S2.Generator.Element, S3.Generator.Element)> {
    let items = s1.lazy.flatMap({
        item1 in s2.lazy.flatMap({
            item2 in s3.lazy.map({
                item3 in (item1, item2, item3)})})})
    return AnySequence {items.generate()}

I initially suggested to the person I was helping:

for y in (...) {
    for x in (...) {

But I'm glad I got to explore several alternative approaches. Thanks all. A few extra notes, to summarize everything into a single post:

Joe writes: "[AnySeq/Gen] aren't on the way out. We'd like to migrate them with first-class language support for protocol types with associated type constraints, but we wouldn't eliminate the functionality."

Dmitri adds: "You can use AnySequence and AnyGenerator, but they come at a cost of dynamic dispatch for every call.  In this case, if you want this component to be suitable for performance-critical code, I would suggest to avoid them for now."

-- E

> On Dec 18, 2015, at 11:08 PM, Rob Mayoff via swift-users <swift-users at swift.org> wrote:
> 1. Can anyone recommended a better name than Cartesian? 2D doesn't work for the compiler and I'm looking for something that doesn't seem "floating-point"-y
> "AllPairs" seems self-explanatory.
> "CrossJoin" should be intuitive to anyone familiar with relational databases.
> "product" sounds like it might be multiplying elements with each other.
>  _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20151219/7cc8a7cf/attachment.html>

More information about the swift-users mailing list