运算符
优质
小牛编辑
138浏览
2023-12-01
运算符是一个符号,告诉编译器执行特定的数学或逻辑操作。 LISP允许对数据进行大量操作,由各种函数,宏和其他结构支持。
允许的数据操作可归类为 -
- 算术运算
- 比较操作
- 逻辑运算
- 按位操作
算术运算
下表显示了LISP支持的所有算术运算符。 假设变量A保持10,变量B保持20然后 -
操作者 | 描述 | 例 |
---|---|---|
+ | 添加两个操作数 | (+ AB)将给出30 |
- | 从第一个减去第二个操作数 | ( - AB)将给-10 |
* | 将两个操作数相乘 | (* AB)将给200 |
/ | Divides numerator by de-numerator | (/ BA)将给2 |
mod,rem | 模数运算符和整数除法后的余数 | (mod BA)将给出0 |
incf | 增量运算符按指定的第二个参数增加整数值 | (incf A 3)将给出13 |
decf | Decrements运算符按指定的第二个参数减小整数值 | (decf A 4)将给出9 |
比较操作
下表显示了LISP支持的所有关系运算符,用于比较数字。 然而,与其他语言中的关系运算符不同,LISP比较运算符可能需要两个以上的操作数,它们仅适用于数字。
假设变量A保持10,变量B保持20,则 -
操作者 | 描述 | 例 |
---|---|---|
= | 检查操作数的值是否全等,如果是,则条件变为真。 | (= AB)不是真的。 |
/= | 检查操作数的值是否全部不同,如果值不相等则条件变为真。 | (/ = AB)是真的。 |
> | 检查操作数的值是否单调递减。 | (> AB)不是真的。 |
< | 检查操作数的值是否单调递增。 | ( |
>= | 检查任何左操作数的值是否大于或等于下一个右操作数的值,如果是,则条件变为真。 | (> = AB)不是真的。 |
<= | 检查任何左操作数的值是否小于或等于其右操作数的值,如果是,则条件变为真。 | (<= AB)是真的。 |
max | 它比较两个或多个参数并返回最大值。 | (最大AB)返回20 |
min | 它比较两个或多个参数并返回最小值。 | (最小AB)返回10 |
布尔值的逻辑运算
通用LISP提供三个逻辑运算符: and, or,而not对布尔值进行操作。 假设A值为nil, B值为5,则 -
操作者 | 描述 | 例 |
---|---|---|
and | 它需要任意数量的参数。 参数从左到右进行评估。 如果所有参数都计算为非nil,则返回最后一个参数的值。 否则返回nil。 | (和AB)将返回NIL。 |
or | 它需要任意数量的参数。 从左到右计算参数,直到一个求值为非nil,在这种情况下返回参数值,否则返回nil 。 | (或AB)将返回5。 |
not | 它接受一个参数,如果参数的计算结果为nil. ,则返回t nil. | (不是A)将返回T. |
数字的按位运算
按位运算符处理位并执行逐位运算。 按位和,或和xor运算的真值表如下 -
p | q | p和q | p或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支持的Bitwise运算符如下表所示。 假设变量A保持60,变量B保持13,则 -
操作者 | 描述 | 例 |
---|---|---|
logand | 这将返回其参数的逐位逻辑AND。 如果没有给出参数,则结果为-1,这是此操作的标识。 | (logand ab))将给出12 |
logior | 这将返回其参数的逐位逻辑INCLUSIVE OR。 如果没有给出参数,则结果为零,这是此操作的标识。 | (logior ab)将给出61 |
logxor | 这将返回其参数的逐位逻辑EXCLUSIVE OR。 如果没有给出参数,则结果为零,这是此操作的标识。 | (logxor ab)将给49 |
lognor | 这将返回其参数的逐位NOT。 如果没有给出参数,则结果为-1,这是此操作的标识。 | (lognor ab)将给出-62, |
logeqv | 这将返回其参数的逐位逻辑EQUIVALENCE(也称为异或)。 如果没有给出参数,则结果为-1,这是此操作的标识。 | (logeqv ab)将给予-50 |