> 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