LISP - 运算符


运算符是告诉编译器执行特定数学或逻辑操作的符号。LISP 允许对数据进行多种操作,并由各种函数、宏和其他结构支持。

允许对数据进行的操作可分为 -

  • 算术运算
  • 比较运算
  • 逻辑运算
  • 按位运算

算术运算

下表列出了 LISP 支持的所有算术运算符。假设变量A为 10,变量B为 20,则 -

显示示例

操作员 描述 例子
+ 添加两个操作数 (+AB) 将给出 30
- 从第一个操作数中减去第二个操作数 (- AB) 将给出 -10
* 将两个操作数相乘 (* AB) 将给予 200
/ 分子除以分子 (/BA) 将给出 2
模组,雷姆 模数运算符和整数除法后的余数 (mod BA) 将给出 0
因CF 增量运算符将整数值增加指定的第二个参数 (incf A 3) 将给出 13
十倍频 递减运算符将整数值减少指定的第二个参数 (decf A 4) 将给出 9

比较运算

下表显示了 LISP 支持的所有用于在数字之间进行比较的关系运算符。然而,与其他语言中的关系运算符不同,LISP 比较运算符可能需要两个以上的操作数,并且它们仅适用于数字。

假设变量A为 10,变量B为 20,则 -

显示示例

操作员 描述 例子
= 检查操作数的值是否全部相等,如果相等则条件成立。 (= AB) 不正确。
/= 检查操作数的值是否全部不同,如果值不相等则条件成立。 (/= AB) 为真。
> 检查操作数的值是否单调递减。 (> AB) 不正确。
< 检查操作数的值是否单调递增。 (<AB) 为真。
>= 检查任何左操作数的值是否大于或等于下一个右操作数的值,如果是,则条件为真。 (>= AB) 不正确。
<= 检查任何左操作数的值是否小于或等于其右操作数的值,如果是,则条件为真。 (<= AB) 为真。
最大限度 它比较两个或多个参数并返回最大值。 (最大 AB)返回 20
分钟 它比较两个或多个参数并返回最小值。 (最小 AB)返回 10

布尔值的逻辑运算

Common LISP 提供了三种逻辑运算符:and、ornot,它们对布尔值进行运算。假设A的值为 nil,B的值为 5,则 -

显示示例

操作员 描述 例子
它需要任意数量的参数。参数从左到右计算。如果所有参数的计算结果均为非零,则返回最后一个参数的值。否则返回 nil。 (和 AB)将返回 NIL。
或者 它需要任意数量的参数。参数从左到右计算,直到计算结果为非 nil,在这种情况下返回参数值,否则返回nil (或 AB)将返回 5。
不是 它接受一个参数,如果该参数的计算结果为nil ,则返回t (不是 A)将返回 T。

数字的按位运算

位运算符作用于位并执行逐位运算。按位与、或和异或运算的真值表如下 -

显示示例

p q p 和 q p 或 q 异或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,则 -

操作员 描述 例子
洛甘德 这将返回其参数的按位逻辑与。如果未给出参数,则结果为 -1,这是此操作的标识。 (logand ab)) 将给出 12
洛焦尔 这将返回其参数的按位逻辑“或”。如果未给出参数,则结果为零,这是此操作的恒等式。 (logior ab) 将给出 61
对数异或 这将返回其参数的按位逻辑异或。如果未给出参数,则结果为零,这是此操作的恒等式。 (logxor ab) 将给出 49
洛格诺 这将返回其参数的按位 NOT。如果未给出参数,则结果为 -1,这是此操作的标识。 (lognor ab) 将给出 -62,
对数 这将返回其参数的按位逻辑等价(也称为异或非)。如果未给出参数,则结果为 -1,这是此操作的标识。 (logeqv ab) 将给出 -50