3.6 数学变换

Emacs Lisp 提供了传统的四种算术运算(加法、减法、乘法和除法),以及取余和取模函数,以及加减 1 的函数。 除了%,这些函数中的每一个都接受整数和浮点参数, 如果任何参数是浮点数,则返回一个浮点数。

Function:1+ number-or-maker 此函数返回数字或标记加1。例如,

(setq foo 4) ⇒ 4 (1+ foo) ⇒ 5 此函数与 C 运算符++不同——它不增加变量。它只是计算一个总和。因此,如果我们继续,

foo ⇒ 4 如果要增加变量,则必须使用setq,如下所示:

(setq foo (1+ foo)) ⇒ 5

Function:1- number-or-maker 此函数返回数字或标记减 1。

Function:+ &rest numbers-or-makers 此函数将其参数相加。当没有给定参数时,+ 返回 0。

(+) ⇒ 0 (+ 1) ⇒ 1 (+ 1 2 3 4) ⇒ 10

Function:- &optional number-or-maker &rest more-numbers-or-makers 该-函数有两个目的:求反和减法。当-有单个参数时,返回值是参数的负数。当有多个参数时,从number-or-marker中累计减去每个more-numbers-or-markers。如果没有参数,则结果为 0。

(- 10 1 2 3 4) ⇒ 0 (- 10) ⇒ -10 (-) ⇒ 0 Function:* &rest numbers-or-makers 此函数将其参数相乘,并返回乘积。当没有给定参数时,* 返回 1。

() ⇒ 1 ( 1) ⇒ 1 (* 1 2 3 4) ⇒ 24

函数:/ number &rest divisors 与一个或多个除数,该函数 依次用 divisor 除 number 并且返回商。由于没有除数,此函数返回 1 / number。每个参数可以是数字或标记。

如果所有参数都是整数,则结果是一个整数,在每次除法后将商向零舍入。

(/ 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 错误 (请参阅 Errors)。非零数除以浮点数零会产生正无穷大或负无穷大(请参阅浮点基础知识)。

Function:% dividend divisor 该函数返回相除后的余数。参数必须是整数或标记。

对于任意两个整数 dividend 和 divisor,

(+ (% dividend divisor) (* (/ dividend divisor) divisor)) 如果 divisor 非零,则结果总是等于 dividend。

(% 9 4) ⇒ 1 (% -9 4) ⇒ -1 (% 9 -4) ⇒ 1 (% -9 -4) ⇒ -1 Function:MOD dividend divisor 此函数取余;

与 不同%,mod允许浮点参数;它将商向下舍入(向负无穷大)为整数,并使用该商计算余数。

如果 divisor 为零, 则在两个参数都是整数时 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。如果任一参数是浮点数,则会有舍入误差影响;如果除数为 0,则会抛出 arith-error 错误。有关floor,请参阅数字转换。

最后更新于