LISP - 运算符
运算符是告诉编译器执行特定数学或逻辑操作的符号。 LISP 允许对数据进行多种操作,并由各种函数、宏和其他结构支持。
允许对数据进行的操作可分为以下几类: −
- 算术运算
- 比较操作
- 逻辑运算
- 按位运算
算术运算
下表列出了 LISP 支持的所有算术运算符。 假设变量 A 为 10,变量 B 为 20 −
运算符 | 描述 | 示例 |
---|---|---|
+ | 添加两个操作数 | (+A B) 将给出 30 |
- | 从第一个操作数中减去第二个操作数 | (- A B) 将给出 -10 |
* | 将两个操作数相乘 | (* A B) 将给出 200 |
/ | 分子除以分母 | (/ B A) 将给出 2 |
mod,rem | 模数运算符和整数除法后的余数 | (mod B A )将给出 0 |
incf | 增量运算符按指定的第二个参数增加整数值 | (incf A 3) 将给出 13 |
decf | 递减运算符将整数值减少指定的第二个参数 | (decf A 4) 将给出 9 |
比较操作
下表显示了 LISP 支持的所有在数字之间进行比较的关系运算符。 然而,与其他语言中的关系运算符不同,LISP 比较运算符可能需要两个以上的操作数,并且它们仅适用于数字。
假设变量 A 为 10,变量 B 为 20,则 −
运算符 | 描述 | 示例 |
---|---|---|
= | 检查操作数的值是否全部相等,如果相等则条件成立。 | (= A B) 不为真。 |
/= | 检查操作数的值是否全部不同,如果值不相等则条件成立。 | (/= A B) 为真。 |
> | 检查操作数的值是否单调递减。 | (> A B) 不为真。 |
< | 检查操作数的值是否单调递增。 | (< A B) 为真。 |
>= | 检查任何左操作数的值是否大于或等于下一个右操作数的值,如果是,则条件为真。 | (>= A B) 不为真。 |
<= | 检查任何左操作数的值是否小于或等于其右操作数的值,如果是,则条件为真。 | (<= A B) is true. |
max | 它比较两个或多个参数并返回最大值。 | (max A B) 返回 20 |
min | 它比较两个或多个参数并返回最小值。 | (min A B) 返回 10 |
布尔值的逻辑运算
Common LISP 提供了三种逻辑运算符:and、or、 和 not,它们对布尔值进行运算。 假设 A 的值为 nil,B 的值为 5,则 −
运算符 | 描述 | 示例 |
---|---|---|
and | 它需要任意数量的参数。 参数从左到右计算。 如果所有参数的计算结果均为非零,则返回最后一个参数的值。 否则返回 nil。 | (and A B) 将返回 NIL。 |
or | 它需要任意数量的参数。 参数从左到右计算,直到计算结果为非零,在这种情况下返回参数值,否则返回nil。 | (or A B) 将返回 5。 |
not | 它接受一个参数,如果该参数的计算结果为nil,则返回t。 | (not A) 将返回 T。 |
数字的按位运算
位运算符作用于位并执行逐位运算。 按位与、或、异或运算的真值表如下 −
p | q | p and q | p or q | p xor q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
Assume if A = 60; and B = 13; now in binary format they will be as follows: A = 0011 1100 B = 0000 1101 ----------------- A and B = 0000 1100 A or B = 0011 1101 A xor B = 0011 0001 not A = 1100 0011
LISP 支持的按位运算符如下表所示。 假设变量 A 为 60,变量 B 为 13,则 −
运算符 | 描述 | 示例 |
---|---|---|
logand | 这将返回其参数的按位逻辑与。 如果未给出参数,则结果为 -1,这是此操作的标识。 | (logand a b)) 将给出 12 |
logior | 这将返回其参数的按位逻辑"或"。 如果没有给出参数,则结果为零,这是此操作的标识。 | (logior a b) 将给出 61 |
logxor | 这将返回其参数的按位逻辑异或。 如果没有给出参数,则结果为零,这是此操作的标识。 | (logxor a b) 将给出 49 |
lognor | 这将返回其参数的按位 NOT。 如果未给出参数,则结果为 -1,这是此操作的标识。 | (lognor a b) 将给出 -62, |
logeqv | 这将返回其参数的按位逻辑等价(也称为异或非)。 如果未给出参数,则结果为 -1,这是此操作的标识。 | (logeqv a b) 将给出 -50 |