7.1 运算符简介
可以定义具有指定优先级的新运算符、取消定义现有运算符或重新定义现有运算符的优先级。运算符可以是一元前缀或一元后缀、二元中缀、n元中缀、匹配缀或无缀。“Matchfix”是指一对符号,包含它们的参数,“nofix”是指不带参数的运算符。作为不同类型运算符的示例,有以下几种。
一元前缀
取负 -a
一元后缀
阶乘 a!
一元中缀
求幂 a^b
n元中缀 加法 a+b
匹配缀 列表结构 [a,b]
没有内置的nofix运算符;有关此类运算符的示例,请参见nofix。
定义新运算符的机制很简单。只需要将函数声明为运算符;运算符函数可以是已定义的,也可以是没定义。
用户定义的运算符的示例如下。注意显式函数 调用"dd"(a)等同于dd a,同样"<-"(a,b)等同于a<-b。函数"dd"和"<-"在本例中未定义。
定义新运算符的Maxima函数总结在下表中,说明默认的左右约束权(分别是lbp和rbp)。(约束权确定运算符优先级。然而,由于左右两种约束权可能不同,约束权比优先级要复杂一些。)一些操作定义函数采用其他参数;有关详细信息,请参阅函数说明。
prefix rbp=180
postfix lbp=180
infix lbp=180, rbp=180
nary lbp=180, rbp=180
matchfix (约束权不适用)
nofix (约束权不适用)
相比之下,这里有一些内置的操作符及其左右约束权。
运算符 lbp rbp
: 180 20
:: 180 20
:= 180 20
::= 180 20
! 160
!! 160
^ 140 139
. 130 129
* 120
/ 120 120
+ 100 100
- 100 134
= 80 80
# 80 80
> 80 80
>= 80 80
< 80 80
<= 80 80
not 70
and 65
or 60
, 10
$ -1
; -1
remove和kill从原子中移除运算符属性。remove("a", op)仅删除a的运算符属性。kill("a")删除a的所有属性,包括运算符属性。请注意,运算符名必须用引号括起来。
7.2 算术运算符
+[运算符]
-[运算符]
*[运算符]
/[运算符]
^[运算符]
符号+ * / 和^分别表示加法、乘法、除法和求幂。这些运算符名分别为“+”“*”“/”和“^”,它们可能出现在函数或运算符需要的位置。
符号+和-分别表示一元取正和取负,这些运算符的名称分别为“+”和“-”。
减法a-b在Maxima中表示为加法,a+(-b)。表达式如a+(-b)显示为减法。Maxima只将“-”识别为一元取负运算符名,而不识别为二元减法运算符名。
除法a/b在Maxima中表示为乘法,a * b^(- 1)。表达式如a * b^(- 1)都显示为分式。Maxima将“/”识别为除法运算符号。
加法和乘法是n元的交换运算符。除法和求幂是二元的非交换运算符。
Maxima对交换运算符的操作数进行排序,以构造规范表示。对于内部存储,排序由orderlessp决定。对于显示,加法的顺序由ordergreatp决定,乘法的顺序与内部顺序相同。
算术运算是在字面数值(整数、有理数、普通浮点数和双浮点数)上进行的。除求幂运算外,所有数值的算术运算都简化为数字。如果操作数是普通浮点数或双浮点数,或者结果是精确整数或有理数,则将求幂简化为数字;否则,可以将求幂简化为sqrt或其他求幂,或者保持不变。
浮点传递适用于算术计算:如果任何操作数是双浮点数,结果是双浮点数;否则,如果任何操作数是普通的浮点数,则结果是一个普通浮点数;否则,如果操作数是有理数或整数,则结果是有理数或整数。
算术运算是一种简化,而不是赋值。因此,算术是在引用(但简化)表达式中进行的。
当全局标签listarith为true时,算术运算将逐个元素地应用于列表,并且始终逐个元素应用于矩阵。当一个操作数是列表或矩阵,另一个操作数是其他类型的操作数时,另一个操作数与列表或矩阵的每个元素组合在一起。
例子:
加法和乘法是n元的交换运算符。Maxima对操作数进行排序以构造规范表示。这些运算符的名称是“+”和“*”。
除法和求幂是二元的非交换运算符。这些运算符的名称是“/”和“^”。
特别地,减法和除法在内部是用加法和乘法表示的。
运算是在字面数值上进行的。浮点传递适用。
算术运算是一种简化,而不是赋值。
对于列表(取决于listarith)和矩阵,算法是逐个元素执行的。
**[运算符]
求幂运算符。在输入中,Maxima将**识别为与^相同的运算符,并在一维输出中显示为^或在二维输出中将指数作为上标放置。
fortran函数将求幂运算符显示为**,无论它是以**还是以^输入。
例子:
^^[运算符]
非交换求幂运算符。^^是对应于非交换乘法.的求幂运算符,正如普通求幂运算符^对应于交换乘法*一样,非交换求幂在一维输出中以^^显示,在二维输出中以<>角括号内的上标形式显示。
.[运算符]
矩阵(非交换)的点乘运算符。当用这种方式使用“.”时,应在它的两边留有空格,例如A . B。这将它与浮点数中的小数点区别开来。
另请参见Dot, dot0nscsimp, dot0simp, dot1simp, dotassoc, dotconstrules,
dotdistrib, dotexptsimp, dotident, and dotscrules。