优先级

DolphinDB的运算符优先级顺序符合常识。经常使用的运算符的优先级与大多数编程语言相似。表达式中优先级最高的运算符首先被执行,具有相同优先级的运算符则按从左到右的顺序执行。

$ a=5;
$ 3+a*a;
28
// 3+(a*a)

$ 3*a..10;
[15,18,21,24,27,30]
// 3*(a..10)

在一元运算符的右侧使用二元运算符可能会产生歧义。例如,abs x-10可以解释为abs(x-10)或abs(x)-10。我们使用第一个解释,即一元运算符将整个表达式视为一个运算数。这里我们建议使用括号以避免歧义。

另外举个例子,avg sin abs -100..100 等同于 avg(sin(abs(-100..100)))。

$ avg sin abs -100..100;
-0.001265

$ avg(sin(abs(-100..100)));
-0.001265

$ sum 1 2 3 == 6;
0
// 相当于 sum(1 2 3 == 6)

$ x = 10
$ sin(x) + cos(x);
-1.383093

$ sin x + cos x;
0.260799
// 相当于 sin(x+cos x)

$ x = 1 NULL 1;
$ y = NULL 1 1;
$ (isNull x) || (isNull y);
[1,1,0]
$ isNull x || isNull y;
[0,1,0]
// 相当于 isNull (x || (isNull y))

初级一元运算符neg(-)和not(!)是上述一元运算符规则的两个例外。当与其他二元运算符混合时,它们按照运算符表中设置的优先级顺序执行。

例如,-n..n 等同于 (-n)..n 因为运算符 neg和seq具有相同的优先级。

$ n=5;
$ -n..n;
[-5,-4,-3,-2,-1,0,1,2,3,4,5]

$ (-n)..n;
[-5,-4,-3,-2,-1,0,1,2,3,4,5]

$ -(n..n);
[-5]

$ x=1 2 3;
$ !x-1;
[-1,-1,-1]

用户定义函数用作运算符时,它的优先级与乘法和除法的优先级一样。

$ def f1(x,y):x+y
$ 2 add 3 sub 5 f1 5;
-5