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