Emacs Lisp 提供传统的四种算术运算(addition加、subtraction减、multiplication乘、division除),以及取余、取模、自增 1 和自减 1 函数。除 % 外,这些函数均接受整数和浮点数参数,只要任意一个参数是浮点数,就返回浮点数。
返回 number-or-marker 加 1。 示例:
(setq foo 4)
⇒ 4
(1+ foo)
⇒ 5
该函数不等价于 C 语言的 ++ — 它不会修改变量,只做加法计算。因此继续执行:
foo
⇒ 4
若要真正修改变量,必须配合 setq,如下:
(setq foo (1+ foo))
⇒ 5
返回 number-or-marker 减 1。
对所有参数求和。无参数时返回 0。
(+)
⇒ 0
(+ 1)
⇒ 1
(+ 1 2 3 4)
⇒ 10
- 有两个作用:取负、减法。
单个参数:返回其相反数;
多个参数:从第一个数 number-or-marker 中依次减去后面所有数 more-numbers-or-markers;
无参数:返回 0。
(- 10 1 2 3 4)
⇒ 0
(- 10)
⇒ -10
(-)
⇒ 0
对所有参数求积。无参数时返回 1。
(*)
⇒ 1
(* 1)
⇒ 1
(* 1 2 3 4)
⇒ 24
有一个或多个 divisors除数:将 number 依次除以每个 divisors除数,返回商; 无除数:返回 1/number(即倒数)。每个参数都可以是数值或标记(marker)
若所有参数均为整数,结果为整数,每次除法后向零取整。
(/ 6 2)
⇒ 3
(/ 5 2)
⇒ 2
(/ 5.0 2)
⇒ 2.5
(/ 5 2.0)
⇒ 2.5
(/ 5.0 2.0)
⇒ 2.5
(/ 4.0)
⇒ 0.25
(/ 4)
⇒ 0
(/ 25 3 2)
⇒ 4
(/ -17 6)
⇒ -2
如果将整数除以整数 0,Emacs 会抛出 arith-error 错误(see 错误)。
在使用 IEEE-754 浮点数的系统上,非零浮点数除以 0 会得到正无穷或负无穷(see 浮点数基础);否则,会照常抛出 arith-error 错误。
该函数返回 dividend被除数除以 divisor除数 后的整数余数。参数必须是整数或标记(marker)。
对于任意两个整数 dividend被除数 和 divisor除数,当除数非零时:
(+ (% dividend divisor) (* (/ dividend divisor) divisor))
在 divisor除数 不为零时,结果恒等于 dividend被除数。
(% 9 4)
⇒ 1
(% -9 4)
⇒ -1
(% 9 -4)
⇒ 1
(% -9 -4)
⇒ -1
该函数返回 dividend被除数 对 divisor除数 取模的结果;换句话说,是 dividend被除数 除以 divisor除数 的余数,但符号与除数相同。参数必须是数值或标记。
与 % 不同,mod 允许浮点数参数;它会将商向下取整(向负无穷方向),再用该商计算余数。
若 divisor除数 为 0,如果两个参数都是整数,mod 抛出 arith-error 错误,否则返回 NaN。
(mod 9 4)
⇒ 1
(mod -9 4)
⇒ 3
(mod 9 -4)
⇒ -3
(mod -9 -4)
⇒ -1
(mod 5.5 2.5)
⇒ .5
对于任意两个数值 dividend被除数 和 divisor除数,
(+ (mod dividend divisor) (* (floor dividend divisor) divisor))
恒等于 dividend被除数;若任一参数为浮点数,则可能存在舍入误差;若 dividend被除数 是整数且 divisor除数 为 0,则抛出 arith-error。关于 floor,见 数值转换。