On Jun 29, 2016, at 9:33 AM, David Sweeris <[email protected]> wrote:
> Types where it makes sense, or types for which such semantics would be a good
> idea? Because, for example, you could do something like this:
> struct HTMLParser : IntegerLiteralConvertible {
> init(integerLiteral value: IntegerLiteralType) {
> htmlMajorVersion = value
> htmlMinorVersion = 0
> }
> }
>
> Back in the realm of math, I don’t think Sedenions — a 16-demensional (in the
> sense that complex numbers are 2-dimensional) number — have a well-defined
> division operator.
>
> As a more likely example, I don’t think it’d be too much of a stretch to
> attach integer literal semantics to matrices:
> let x: Matrix = 1 // Sets diagonal to 1
> Matrices don’t have a division operator, and you can’t do any of the
> `Arithmetic` functions to two matrices without first checking their
> dimensions.
There is at least an argument to be made that *division* doesn’t belong. I
think most people's common-sense notion of being “numbery” lies somewhere
between a ring and a field (but probably doesn’t include the Sedenions, which
aren’t associative).
That said, there are certainly some practical considerations in favor of
including division in Arithmetic.
I think matrix dimension mismatches (for variably-dimensioned types) are best
handled via precondition; the operator exists, but will trap if they don’t
match.
> Plus, inherently-dimensioned matrix types:
> var x = Matrix<_2,_3>() // "_2" and "_3" are dummy types
> can’t implement `*`, unless their two dimensions happen to be equal —
> "Matrix<2,3>() * Matrix<2,3>()” doesn’t have a valid definition.
I’m not sure it makes sense to have scalar initializers or literals for
non-square matrices, since you don't have 1*x = x.
We’re a little bit off in the weeds here =)_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution