<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div></div><div>Even though `-3 ** 2` seems to equal 9 but see this result:&nbsp;<a href="http://m.wolframalpha.com/input/?i=-3+%5E+2&amp;x=0&amp;y=0">http://m.wolframalpha.com/input/?i=-3+%5E+2&amp;x=0&amp;y=0</a></div><div><br></div><div>So this behavior forces you to set correct parenthesis around numbers with a minus sign: (-3) ** 2</div><div>In order to <span style="background-color: rgba(255, 255, 255, 0);">make -3 ** 2 visually less ambiguous we could allow (or even require) prefix operators to have a white space separator:</span></div><div><span style="background-color: rgba(255, 255, 255, 0);">- 3 ** 2</span></div><div><span style="background-color: rgba(255, 255, 255, 0);"><br></span></div><div><span style="background-color: rgba(255, 255, 255, 0);"><br></span></div><div><span style="background-color: rgba(255, 255, 255, 0);">Another example:</span></div><div><br></div><div>3 * -4</div><div>Would be in this case also ambiguous for the compiler since `*` and `-` have the same precedence and you are forced to write it as:</div><div>3 * (-4)</div><div>Which is also mathematically more correct</div><div><br></div><div><br></div><div>I just noticed that</div><div>3 - -4</div><div>Is still unambiguous.</div><div>If the precedence of prefix - would be the same as infix `+` and `-` all cases I can think of are ambiguous so you are forced to use correct mathematical syntax:</div><div>3 - (-4)</div><div><br></div><div>Which could also be an indicator to rewrite it to</div><div>3 + 4</div><div>And 3 + (-4) to 3 - 4</div><div><br></div><div><br></div><div>- Maximilian</div><div><br>Am 17.01.2016 um 17:48 schrieb David Sweeris &lt;<a href="mailto:davesweeris@mac.com">davesweeris@mac.com</a>&gt;:<br><br></div><blockquote type="cite"><div><meta http-equiv="content-type" content="text/html; charset=utf-8"><div></div><div>In that context, I would say 9 is the correct answer. Mathematically speaking, the "-" is part of the number, not an operator.</div><div><br></div><div>At least I think that's how it worked last time I was in math class.</div><div><br></div><div>- Dave Sweeris</div><div><br>On Jan 17, 2016, at 08:24, Maximilian Hünenberger via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br><br></div><blockquote type="cite"><div><meta http-equiv="content-type" content="text/html; charset=utf-8"><div></div><div>It's true prefix operators have the highest precedence (like ∞) but it should be lower so `-3**2` gets mathematically correct evaluated to `-9` if such an expression appears.</div><div><br></div><div>- Maximilian</div><div><br>Am 17.01.2016 um 02:36 schrieb 肇鑫 &lt;<a href="mailto:owenzx@gmail.com">owenzx@gmail.com</a>&gt;:<br><br></div><blockquote type="cite"><div><div dir="ltr"><div class="gmail_default" style="font-family:georgia,serif">I think they are already the highest&nbsp;<span style="font-family:arial,sans-serif;font-size:13px">precedence</span>. That why they need not to be set this property.&nbsp;</div><div class="gmail_default" style="font-family:georgia,serif"><br></div><div class="gmail_default" style="font-family:georgia,serif">Also, I think things like&nbsp;</div><div class="gmail_default" style="font-family:georgia,serif"><br></div><div class="gmail_default"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><font face="georgia, serif">print(-3**2)<br></font><font face="georgia, serif">print(0-3**2)</font></blockquote><div class="gmail_default"><font face="georgia, serif"><br></font></div><div class="gmail_default"><font face="georgia, serif">should never appear in Swift. As it is hard for human to read.&nbsp;</font></div><div class="gmail_default"><font face="georgia, serif"><br></font></div><div class="gmail_default"><font face="georgia, serif">zhaoxin</font></div><div class="gmail_default"><font face="georgia, serif"><br></font></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Jan 17, 2016 at 5:21 AM, Maximilian Hünenberger <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">+1 for me and as far as values go:<br>
<br>
prefix -<br>
precedence 150, same as infix * since it is essentially (-1)*<br>
<br>
prefix +<br>
same as prefix -<br>
<br>
<br>
To break the least amount of code:<br>
<br>
prefix !<br>
precedence 140, which is higher than any other Bool operator (== is highest with 130)<br>
<br>
prefix ~<br>
precedence 170, which is higher than any other binary operator (&lt;&lt; is highest with 160)<br>
<div><div class="h5"><br>
&gt; Am <a href="tel:16.01.2016" value="+8616012016">16.01.2016</a> um 16:30 schrieb Jason Nielsen via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt;:<br>
&gt;<br>
&gt; Hi all,<br>
&gt;<br>
&gt; My proposal is to add a precedence option for prefix and postfix operators.&nbsp; It is great that swift allows for associativity and precedence for binary operators but it hasn't quite gone all the way to make operator overloading fully functional (just an opinion).&nbsp; To illustrate consider the following code:<br>
&gt;<br>
&gt; import CoreFoundation<br>
&gt;<br>
&gt; infix operator ** { associativity right precedence 200 }<br>
&gt;<br>
&gt; func ** (base: Double, power: Double) -&gt; Double {<br>
&gt;&nbsp; &nbsp; &nbsp;return pow(base, power)<br>
&gt; }<br>
&gt;<br>
&gt; print(-3**2)<br>
&gt; print(0-3**2)<br>
&gt;<br>
&gt; which prints 9 and -9.&nbsp; In the first case because unary minus has higher precedence as a prefix operator it evaluates to (-3)*(-3) and the second because - is viewed as a binary operator of lower precedence as (0-(3*3).&nbsp; Exponentiation has higher precedence than subtraction so -3**2 should be -9 and the two expressions above are mathematically equivalent.&nbsp; I originally reported this as a bug (SR-552) as to me the point of operator overloading is to allow you to write numerical expressions cleanly but should give you the correct mathematical result.&nbsp; The only really useful application I can think of for operator overloading is basically as a DSL for numerical expressions.&nbsp; If it doesn't allow you to get correct results without having to put brackets everywhere it sort of defeats the purpose (just my opinion of course).<br>
&gt;<br>
&gt; Best regards,<br>
&gt; Jason<br>
</div></div>&gt; _______________________________________________<br>
&gt; swift-evolution mailing list<br>
&gt; <a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</blockquote></div><br></div>
</div></blockquote></div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>swift-evolution mailing list</span><br><span><a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a></span><br><span><a href="https://lists.swift.org/mailman/listinfo/swift-evolution">https://lists.swift.org/mailman/listinfo/swift-evolution</a></span><br></div></blockquote></div></blockquote></body></html>