> On Jan 25, 2017, at 07:59, Anton Mironov via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> Hi everyone,
> 
> I want to suggest a tiny extension to an Arithmetic protocol. It would be 
> nice to have an additive identity and a multiplicative identity constants. 
> Basically zero and one.
> 
> ```
> protocol Arithmetic {
>   /* ... */
>   static var zero: Self { get }  // additive identity: (value + .zero) == 
> value
>   static var one: Self { get }   // multiplicative identity: (value * .one) 
> == value
> }
> ```
> 
> These constants will ease implementation of math structures: vectors, 
> matrices and etc.
> I’m sorry if I’m duplicating someone’s suggestion. It is really hard to 
> search for something in a long thread.

Vectors, matrices, etc can't conform to this protocol anyway because of the * 
and / requirements. And while it is true that it's not uncommon to reference an 
all-zero matrix or vector as "0", that doesn't work for any other number... for 
them I think the spelling should be "additiveIdentity". It'll be easy enough to 
just say
protocol Addable {
    static var additiveIdentity: Self {get}
    ...
}
extension Addable where Self: Arithmetic {
    static var additiveIdentity: Self {return Self.zero}
}

IMHO, anyway.

- Dave Sweeris
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to