为什么 Julia 对于等效表达式返回不同的结果?6÷2(1+2) 和 6÷2*(1+2)

6 julia

我在 Julia 的 REPL 中输入了以下内容:

\n
julia> 6\xc3\xb72(1+2)\n1\n\njulia> 6\xc3\xb72*(1+2)\n9\n
Run Code Online (Sandbox Code Playgroud)\n

为什么输出的结果不同呢?

\n

Presh Talwalkar9在电影中说的是正确的\n 6\xc3\xb72(1+2) = ? 数学家解释正确答案 - YouTube

\n

Kri*_*son 10

尽管有 YouTube,但没有正确答案。您得到的答案取决于您用来解释问题的优先约定。许多周期性传播的病毒式“谜语”之所以引起争议,正是因为它们故意含糊不清。这实际上不是一个数学难题,这只是一个解析问题。这并不比某人说出一个有两种解释的句子更深。在现实生活中遇到这种情况你会怎么做?你只要问他们指的是哪一个就可以了。这没什么不同。正是由于这个原因,该\xc3\xb7符号在真正的数学符号中并不经常使用,而是使用分数符号,这清楚地消除了歧义:

\n
6\n- (1 + 2) = 9\n2\n
Run Code Online (Sandbox Code Playgroud)\n

或作为

\n
    6\n--------- = 1\n2 (1 + 2)\n
Run Code Online (Sandbox Code Playgroud)\n

具体就 Julia 而言,这种优先行为记录如下:

\n

https://docs.julialang.org/en/v1/manual/integers-and-floating-point-numbers/#man-numeric-literal-coefficients

\n

具体来说:

\n
\n

数字文字系数的优先级略低于一元运算符(例如求反)的优先级。所以-2x被解析为(-2) * x并被\xe2\x88\x9a2x解析为(\xe2\x88\x9a2) * x。然而,当与幂运算结合时,数字文字系数的解析类似于一元运算符。例如2^3x被解析为2^(3x)2x^3被解析为2*(x^3)

\n
\n

和注释:

\n
\n

用于隐式乘法的数字文字系数的优先级高于其他二元运算符,例如乘法 ( *) 和除法 ( /\\//)。例如,这意味着1 / 2imequals-0.5im6 // 2(2 + 1)equals 1 // 1

\n
\n