表达式(Expression)
一套可能包含许多数学运算符、变量/常量、函数,计算后返回浮点数的数学表达式。
表达式以字符串形式存在,由 Paralithic 进行解析与计算。
表达式以简单数学格式写就,例如,3 + 2 / 8
即表示
数字格式
在表达式中,所有数字均视为浮点数。
一个数字本身即为一条有效的表达式。
- 数字可以像
5832
这样直接定义。 - 小数可以像
64.34
这样定义。 - 小数后多余的零同样有效,例如
64.00
。 - 下划线
_
可以用作虚拟分隔符(实际运算中会被忽略),如1_000_000
。 - 可以在数字末尾加上国际单位制词头,例如
2m
算作2 * 1000
,即2000
,此处m
指 mega。
量词 | 对应值 | 全名 |
---|---|---|
n | 0.000000001( | 纳 |
u | 0.000001( | 微 |
m | 0.001( | 毫 |
K | 1_000( | 千 |
M | 1_000_000( | 兆 |
G | 1_000_000_000( | 吉咖 |
- 数字可以以正号
+
或负号-
表示其正负。如-1337
、+1337
。 - 数字可以使用科学计数法表示,字符
e
(或E
)为幂与小数部分的分隔符。例如,6.72e9
等价于,或 6_720_000_000。
变量
命名常量/变量是带有名称的值。在表达式中填写它们的变量名称即可引用,例如,在表达式中引用变量 myVariable
:myVariable * 20
。
无法在表达式中定义新变量。变量是在表达式之外定义的。可以使用的变量取决于表达式的情景,部分配置对象有特定的变量,如 x
或 y
,会随世界位置改变,部分配置还允许你自定义用于表达式的常量。
内建常量
如下常量可以在任何表达式中使用:
运算
布尔值表示
表达式能处理浮点数,但它们还支持布尔值参与的逻辑运算。为了支持这样的运算,false
视作 0
,true
可以表示为任意非零值。如果运算返回 true,这表示它们返回的值是 1
。
信息
布尔值通常与 if
内置函数搭配使用,因此大部分情况下数字的布尔值表示是不可见的。例如,表达式 if(1 > 2, 5, 8)
没有直接引用 1
和 0
(即 true 和 false)。
可用运算符
如下为表达式内可用的运算符,按优先级从高到低排列,计算时按优先级从高到低解析。保留词 expr
、left
与 right
用于引入新表达式(数字、变量或其他运算符等):
运算符 | 格式 | 描述 |
---|---|---|
1 | (表达式) | 表达式组,允许调整优先级 |
1 | |表达式| | 取表达式的绝对值 |
- | ||
2 | -表达式 | 表达式取反 |
- | ||
3 | 左 ^ 右 | 幂运算,相当于 左 的 右 次方 |
- | ||
4 | 左 * 右 | 左右相乘 |
4 | 左 / 右 | 左除以右 |
4 | 左 % 右 | 左除以右,取余 |
- | ||
5 | 左 + 右 | 左右相加 |
5 | 左 - 右 | 左减去右 |
- | ||
6 | 左 < 右 | 若右大于左则返回 true,反之返回 false |
6 | 左 <= 右 | 若右大于等于左则返回 true,反之返回 false |
6 | 左 > 右 | 若左大于右则返回 true,反之返回 false |
6 | 左 >= 右 | 若左大于等于右则返回 true,反之返回 false |
6 | 左 = 右 | 若左右相等则返回 true,否则返回 false |
6 | 左 != 右 | 若左右不等则返回 true,否则返回 false |
- | ||
7 | 左 && 右 | 若左右均为 true 则返回 true,否则返回 false |
7 | 左 || 右 | 若左或右为 true 则返回 true,否则返回 false |
结合性
二元运算(只有两个数参与的运算)为左结合性,即优先级相同的情况下从左至右运算,如 3 - 2 + 1 + 3
则为 (((3 - 2) + 1) + 3)
。
函数
函数以名称加括号的形式在表达式中调用。参数填入括号内,多个参数使用英文逗号 ,
分隔。
- 无参数:
exampleFunction()
- 单参数:
exampleFunction(3)
- 多参数:
exampleFunction(3, 2)
传入函数的参数也可以是表达式,如下所示:
exampleFunction(3 + 2 / exampleFunction(9 * 5))
内置函数
如下为内置的函数列表,可在所有表达式中使用:
函数名称 | 参数数量 | 函数描述 |
---|---|---|
floor | 1 | 为传入的浮点数向下取整 |
ceil | 1 | 为传入的浮点数向上取整 |
round | 1 | 为传入的浮点数四舍五入取整 |
pow | 2 | 幂运算,第一个参数为底数,第二个参数为指数 |
min | 2 | 返回二者中较小的值 |
max | 2 | 返回二者中较大的值 |
sqrt | 1 | 取传入数的平方根 |
sin | 1 | 取传入数的正弦值 |
cos | 1 | 取传入数的余弦值 |
tan | 1 | 取传入数的正切值 |
sinh | 1 | 取传入数的双曲正弦值 |
cosh | 1 | 取传入数的双曲余弦值 |
tanh | 1 | 取传入数的双曲正切值 |
asin | 1 | 取传入数的反正弦值 |
acos | 1 | 取传入数的反余弦值 |
atan | 2 | 取传入数的反正切值 |
atan2 | 2 | 见维基百科 |
rad | 1 | 将传入数转为弧度 |
deg | 1 | 将传入数转为角度 |
abs | 1 | 取传入数的绝对值 |
log | 1 | 返回以 10 为底数,传入参数的对数值 |
ln | 1 | 返回以自然常数 |
exp | 1 | 返回 e 的传入参数次幂 |
sign | 1 | 若 传入参数 < 0.0 ,返回 -1.0 ,若 传入参数 = 0.0 ,则返回 0.0 ,如果 传入参数 > 0.0 ,则返回 1.0 |
sigmoid | 2 | S 型函数运算。等价于 |
if | 3 | 三元表达式 - 如果首个参数为 true(释义见此),则返回第二个参数,否则返回第三个参数。 |
留白
空字符(空格、换行、TAB 制表符等)可以出现在表达式中。空字符可以用于分隔表达式,例如将其分为多行,在运算符之间插入空格便于阅读。任何带空格的语句与无空格的形式等同。
例如,将如下函数的参数分为多行:
atan2(
1 + 45,
4 / 8
)
注释
任何双斜杠 //
之后的文本都会视作注释。它们不会被解析。
例如:4 * 2 // 此为注释
插件同样支持多行注释,/*
与 */
之间的文本视作多行注释,不会被解析。
例如:
atan2(
1 + 45,
4 / 8
/* 这里是一条多行注释
在这里的文本不会参与表达式计算 */
)
用途
有 3 个参数用到:
- NoiseSampler 中的 EXPRESSION:
- MathFunction 中的 map:
- NoiseSampler 中的 EXPRESSION_NORMALIZER:
in
(input
的缩写)参数的表达式。