当前位置: 首页 > 文档资料 > LISP 中文教程 >

运算符

优质
小牛编辑
133浏览
2023-12-01

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

允许的数据操作可归类为 -

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

算术运算

下表显示了LISP支持的所有算术运算符。 假设变量A保持10,变量B保持20然后 -

Show Examples

操作者描述
+添加两个操作数(+ AB)将给出30
-从第一个减去第二个操作数( - AB)将给-10
*将两个操作数相乘(* AB)将给200
/Divides numerator by de-numerator(/ BA)将给2
mod,rem模数运算符和整数除法后的余数(mod BA)将给出0
incf增量运算符按指定的第二个参数增加整数值(incf A 3)将给出13
decfDecrements运算符按指定的第二个参数减小整数值(decf A 4)将给出9

比较操作

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

假设变量A保持10,变量B保持20,则 -

Show Examples

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

布尔值的逻辑运算

通用LISP提供三个逻辑运算符: and, or,not对布尔值进行操作。 假设A值为nil, B值为5,则 -

Show Examples

操作者描述
and它需要任意数量的参数。 参数从左到右进行评估。 如果所有参数都计算为非nil,则返回最后一个参数的值。 否则返回nil。(和AB)将返回NIL。
or它需要任意数量的参数。 从左到右计算参数,直到一个求值为非nil,在这种情况下返回参数值,否则返回nil(或AB)将返回5。
not它接受一个参数,如果参数的计算结果为nil. ,则返回t nil.(不是A)将返回T.

数字的按位运算

按位运算符处理位并执行逐位运算。 按位和,或和xor运算的真值表如下 -

Show Examples

pqp和qp或qp xor q
00000
01011
11110
10011
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