表达式语法

基本上和js语法差不多,除了部分运算符为数学表达式外。例如: ^ 运算符代表指数函数,而不是异或。

运算符优先级(从上到下依次递减)

运算符 关联性 说明
( ... ) 优先计算
f(), x.y 调用函数、访问属性
! 阶乘
^ 指数运算
+, -, not, sqrt, etc. 前缀一元运算符 (请参阅下面的完整列表)
*, /, % 乘法、除法、求余
+, -, || 加法、减法、字符串串联
==, !=, >=, <=, >, < 等于、不等于……
a in S a 是否是 集合S 中的元素
and 逻辑与运算符
or 逻辑或运算符
c ? a : b 三元条件运算符 (if c then a else b)

一元运算符

解析器包含一些内置函数,实际上会作为一元运算符来使用。他们和预定义函数的区别是他们只接受一个参数, 而且不需要括号包围起来。包含括号的一元运算符优先级最高,不包含括号的一元运算符优先级仅次于 ^。 例如,sin(x)^2 等价于 (sin x)^2, 而 sin x^2 等价于 sin(x^2)

+- 两种一元运算符是例外,因为不存在对应的函数,所以优先级永远最高。.

运算符 说明
-x 负数
+x 将操作数转化为数字类型。
x! 对于正整数是阶乘,对于非正整数是 gamma(x + 1)
abs x x的绝对值
acos x 反余弦,x等于弧度
acosh x 反双曲余弦,x等于弧度
asin x 反正弦,x等于弧度
asinh x 反双曲正弦,x等于弧度
atan x 反正切,x等于弧度
atanh x 反双曲正切,x等于弧度
ceil x 向上取整
cos x 余弦,x等于弧度
cosh x 双曲余弦,x等于弧度
exp x 指数函数,等价于 e^x
floor x 向下取整
length x x的字符串长度
ln x x的自然对数
log x x的自然对数
log10 x x的常用对数
not x 逻辑否
round x 舍入取整,使用四舍五入法
sin x 正弦,x等于弧度
sinh x 双曲正弦,x等于弧度
sqrt x 平方根,如果 x 为负数, 结果为 NaN
tan x 正切,x 等于弧度
tanh x 双曲正切,x 等于弧度
trunc x 直接取整,舍去小数部分。x为正数时向下取整,x为负数时向上取整

预定义函数

除了运算符外,还有一些预定义的函数。预定义函数不会被 simplify 处理

函数 说明
random(n) 获取 [0, n) 之间的随机数,如果 n = 0,或者未提供 n ,则默认使用 1 代替 n
min(a,b,…) 列表中最小的数字
max(a,b,…) 列表中最大的数字
hypot(a,b) 斜边长, a, b 分别指直角三角形的两个直角边,结果是直角三角形斜边长.
pyt(a, b) 等价于 hypot
pow(x, y) 等价于 x ^ y
atan2(y, x) atan(x / y). i.e. 坐标系中点 (0, 0) 到点 (x, y) 连线与x轴之间夹角.
if(c, a, b) 三元表达式 c ? a : b 的函数形式
roundTo(x, n) x 四舍五入 n 位小数.