[swift-evolution] ed/ing, InPlace, Set/SetAlgebra naming resolution

Ricardo Parada rparada at mac.com
Sun Feb 14 15:51:34 CST 2016


You are right. I agree with your feedback. 

Ricardo Parada

> On Feb 14, 2016, at 11:10 AM, Dave Abrahams <dabrahams at apple.com> wrote:
> 
> 
>> on Sat Feb 13 2016, Ricardo Parada <rparada-AT-mac.com> wrote:
>> 
>> Hi Dave,
>> 
>> I would be okay with staying away from the mathematical terms similar
>> to what you are suggesting except that the union can still be made
>> more concise if you use merged / merge for the base name and shorten
>> the labels to a bare minimum without loosing clarity.  In addition,
>> the merge can have a second parameter with a default to false in order
>> to implement the symmetric difference (a.k.a. exclusive or).  Recall
>> that symmetric difference is the union of two sets and then removing
>> the intersection (or members in common).  I think it looks perfect
>> (concise and clear).  What does everybody else think?
>> 
>> Non-mutable
>> 
>> let union =            a.merged(with: b)
>> let intersection =        a.members(in: b)
>> let difference =        a.removingMembers(in: b)
>> let symmetricDifference =    a.merged(with: b, removingMembersInCommon: true)
>> 
>> Mutable (In-Place)
>> 
>> a.merge(with: b)        // union in-place
>> a.removeMembers(notIn: b)    // intersect in-place
>> a.removeMembers(in: b)        // difference in-place
>> a.merge(with: b, removeMembersInCommon: true)    // symmetric difference in-place
> 
> I love your changes to my suggestion, Ricardo!  The minor alterations I
> would make are:
> 
> 1. In both cases the Bool parameter ought to be called
>   “removingMembersInCommon”
> 
> 2. I would remove “with” from the in-place merge operation.  We're
>   really asking the receiver to merge b into itself.  “With” gives it
>   the sense that it might almost be mutating b.
> 
>> Ricardo Parada
>> 
>>> On Feb 13, 2016, at 1:16 PM, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
>>> 
>>> 
>>> on Fri Feb 12 2016, Ricardo Parada <swift-evolution at swift.org
>>> <mailto:swift-evolution at swift.org>> wrote:
>>> 
>>>> Hi all,
>>>> 
>>>> I can’t make up my mind.  Let me propose two different alternatives
>>>> that I’m not sure if they have been considered:
>>>> 
>>>> ALTERNATIVE 1
>>>> 
>>>> Non-mutable (noun-based)
>>>> 
>>>> -  func union(other: Self) -> Self
>>>> +  func union(other: Self) -> Self        Assumes union is a noun, i.e. not a verb
>>>> 
>>>> -  func intersect(other: Self) -> Self
>>>> +  func intersection(other: Self) -> Self
>>>> 
>>>> -  func subtract(other: Self) -> Self
>>>> +  func subtraction(other: Self) -> Self
>>>> 
>>>> -  func exclusiveOr(other: Self) -> Self
>>>> +  func symmetricSubtraction(other: Self) -> Self
>>>> 
>>>> Mutable (verb-based)
>>>> 
>>>> -  mutating func unionInPlace(other: Self)
>>>> +  mutating func unite(other: Self)
>>>> 
>>>> -  mutating func intersectInPlace(other: Self)
>>>> +  mutating func intersect(other: Self)
>>>> 
>>>> -  mutating func subtractInPlace(other: Self)
>>>> +  mutating func subtract(other: Self)
>>>> 
>>>> -  mutating func exclusiveOrInPlace(other: Self)
>>>> +  mutating func symmetricSubtract(other: Self)
>>>> 
>>>> Comments: 
>>>> 
>>>> With this alternative we keep the union name which I assume is
>>>> popular.  However, one has to accept unite as a verb (for the mutable
>>>> version) as I wanted all the mutable methods use verbs for
>>>> consistency.  I think unite is acceptable because it can be found in
>>>> the dictionary and it is a verb.
>>>> 
>>>> Notice that all the non-mutable methods use nouns: union,
>>>> intersection, subtraction and symmetricSubtraction.
>>>> 
>>>> I understand some may oppose to symmetricSubtraction saying that
>>>> symmetricSubraction is not as common as "exclusive or".  However,
>>>> using symmetricSubtraction is consistent with subtraction and it hints
>>>> to a variation of the “subtraction" operation.  We will get used to it
>>>> quickly / easily.
>>>> 
>>>> The mutable methods all use verbs:  unite, intersect, subtract and symmetricSubtract.
>>>> 
>>>> ALTERNATIVE 2
>>>> 
>>>> Non-mutable
>>>> 
>>>> -  func union(other: Self) -> Self
>>>> +  func adding(other: Self) -> Self
>>>> 
>>>> -  func intersect(other: Self) -> Self
>>>> +  func intersecting(other: Self) -> Self
>>>> 
>>>> -  func exclusiveOr(other: Self) -> Self
>>>> +  func exclusiveOring(other: Self) -> Self
>>>> 
>>>> -  func subtract(other: Self) -> Self
>>>> +  func removing(other: Self) -> Self
>>>> 
>>>> Mutable
>>>> 
>>>> -  mutating func unionInPlace(other: Self)
>>>> +  mutating func add(other: Self)
>>>> 
>>>> -  mutating func intersectInPlace(other: Self)
>>>> +  mutating func intersect(other: Self)
>>>> 
>>>> -  mutating func exclusiveOrInPlace(other: Self)
>>>> +  mutating func exclusiveOr(other: Self)
>>>> 
>>>> -  mutating func subtractInPlace(other: Self)
>>>> +  mutating func remove(other: Self)
>>>> 
>>>> Comments: This alternative gives up on union in favor or add.  Many
>>>> may not like this, that is why I have it as the second alternative.
>>>> It brings back exclusiveOr and treats it as a verb.  Some may argue
>>>> that exclusiveOr is a noun for the "exclusive or" operation.
>>> 
>>> If we are going to force Set fit the naming guidelines, I would prefer
>>> to stay away from the mathematical terms altogether.
>>> 
>>>  func insertingContentsOf(other: Self) -> Self                 // union
>>>  mutating func insertContentsOf(other)
>>> 
>>>  func members(in other: Self) -> Self                           // intersection
>>>  mutating func removeMembers(notIn: other)
>>> 
>>>  func removingMembersAndAddingNonMembers(in other: Self) -> Self // symmetric difference
>>>  mutating func removeMembersAndAddingNonMembers(in other: Self)
>>> 
>>>  func removingMembers(in other: Self) -> Self                    // subtract
>>>  mutating func removeMembers(in other: Self)
>>> 
>>> If it would help with clarity, we could replace "in" with "foundIn"
>>> above.
>>> 
>>> -- 
>>> -Dave
>>> 
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> -- 
> -Dave


More information about the swift-evolution mailing list