[swift-evolution] [Accepted with modifications] SE-0045: Add scan, prefix(while:), drop(while:), and unfold to the stdlib

Dave Abrahams dabrahams at apple.com
Fri May 6 19:30:20 CDT 2016


on Fri May 06 2016, Cole Campbell <swift-evolution at swift.org> wrote:

> I don't know if it's considered too late at this point to rename 'reduce', but
> I'll add an enthusiastic +1 to renaming it to 'fold' and adding 'unfold'. 'Fold'
> is just as obvious a name as 'reduce', IMO (actually I even prefer
> it). 

It's not, IMO.  “Reduce” was chosen deliberately over “fold” because we
think it is more in “common currency” among programmers, in no small
part to the notice that MapReduce has gotten.

> I think changing it now with other source-breaking changes is better
> than moving forward with 'reduce' and a corresponding function with a
> confusing name. Fold/unfold would fit in beautifully with the
> prefix/suffix pairings already in the standard library.
>
> Cole
>
> On May 6, 2016, at 1:29 AM, David Hart via swift-evolution
> <swift-evolution at swift.org> wrote:
>
>     If we are discussing naming changes to reduce, here's my personal opinion:
>
>     * When I first encountered it, I understood exactly what it did because I
>     knew that term of art. If it was named sequence, I would have been confused.
>     * If we are discussing name changes, I'd personally vote to change it to
>     fold. It is the other term of art used for it, and it makes unfold work.
>
>     David
>
>     On 05 May 2016, at 22:39, Chris Lattner via swift-evolution
>     <swift-evolution at swift.org> wrote:
>
>             On May 5, 2016, at 1:03 PM, Erica Sadun <erica at ericasadun.com>
>             wrote:
>
>             On May 4, 2016, at 5:50 PM, Chris Lattner via swift-evolution
>             <swift-evolution at swift.org> wrote:
>
>                 Proposal link:
>                 https://github.com/apple/swift-evolution/blob/master/proposals/0045-scan-takewhile-dropwhile.md
>
>                 Sequence.prefix(while:) & Sequence.drop(while:) - These are
>                 *accepted* as specified in revision 3 of the proposal.
>
>             I'm still a little sad we didn't go for `prefix`/`suffix` or `take`/
>             `drop` pairs that linguistically matched.Nonetheless I'm gratified
>             these are hopping into the language. That said, I'm going to put on
>             my painters cap to consider selecting some exterior latex for the
>             feature I was most looking forward to in this proposal:
>
>             Core team writes:
>
>                 unfold(_:applying:) - This addition is *rejected* by the core
>                 team as written, but deserves more discussion in the community,
>                 and potentially could be the subject of a future proposal. The
>                 core team felt that the utility of this operation is high enough
>                 to be worth including in the standard library, but could not
>                 find an acceptable name for it. “unfold” is problematic, despite
>                 its precedence in other language, because Swift calls the
>                 corresponding operation “reduce” and not “fold”. No one could
>                 get excited about “unreduce”. “iterate” was also considered, but
>                 a noun is more appropriate than an verb in this case. Given the
>                 lack of a good name, the core team preferred to reject to let
>                 the community discuss it more.
>
>             A few thoughts:
>
>             * I'm not sure why a noun is more appropriate than a verb. Reduce
>             isn't a noun, prefix isn't a noun, drop isn't a noun. 
>
>         I’m not a naming guru, but my understanding is that ‘reduce’ was picked
>         because it was term of art (like map), which is what allowed the misuse
>         of a verb.
>
>         One idea that came out of the core team discussion was something like:
>
>         sequence(from: 0) { $0 += 42 }
>
>         Since it returns a sequence.
>
>         -Chris
>
>         _______________________________________________
>         swift-evolution mailing list
>         swift-evolution at swift.org
>         https://lists.swift.org/mailman/listinfo/swift-evolution
>
>     _______________________________________________
>     swift-evolution mailing list
>     swift-evolution at swift.org
>     https://lists.swift.org/mailman/listinfo/swift-evolution
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

-- 
Dave



More information about the swift-evolution mailing list