[swift-evolution] [Accepted with modifications] SE-0045: Add scan, prefix(while:), drop(while:), and unfold to the stdlib
Erica Sadun
erica at ericasadun.com
Fri May 6 20:00:19 CDT 2016
On May 6, 2016, at 6:27 PM, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
>
>
> on Thu May 05 2016, Erica Sadun <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> 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.
>
> I think building an API family around “prefix” and “suffix” that covers
> this and other functionality is a great idea, and would make a great
> proposal**
>
> This whole area needs some design love. Among other things,
>
> s.prefix(4)
>
> should be
>
> s.prefix(ofMaxLength: 4)
>
> ** though we haven't been able to completely eliminate the moral
> equivalent of “drop” from the “dropWhile” function, whatever it's
> eventually called, in any of our experiments
I'm sure that Kevin or I or some other proposalista could put together a quick fast-track rename request for
* suffix(n) -> Self.SubSequence // requires `n >= 0`, `n <= count`
* suffix(maxLength: n) -> Self.SubSequence // requires `n >= 0`
* suffix(while: predicate) -> Self.SubSequence
* prefix(n) -> Self.SubSequence
* prefix(maxLength: n) -> Self.SubSequence
* prefix(while: predicate) -> Self.SubSequence
> 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.
>
> Can't let that one go by; prefix is definitely a noun :-)
I knew you'd point that out. It's not a noun when it's wearing its "I AM VERBING" t-shirt.
That aside, the prevailing sentiment is to rename reduce to `fold` and partner it with `unfold`.
(I personally prefer Chris's `sequence` because I think it better reflects how more Swift users will
use it (never for;;get; never sur;;render). But I recognize that terms of art have a strength of
momentum and familiarity.)
-- E
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160506/88b85091/attachment.html>
More information about the swift-evolution
mailing list