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