- LISP 教程
- LISP - 首页
- LISP - 概述
- LISP - 环境
- LISP - 程序结构
- LISP - 基本语法
- LISP - 数据类型
- LISP - 宏
- LISP - 变量
- LISP - 常量
- LISP - 运算符
- LISP - 决策
- LISP - 循环
- LISP - 函数
- LISP - 谓词
- LISP - 数字
- LISP - 字符
- LISP - 数组
- LISP - 字符串
- LISP - 序列
- LISP - 列表
- LISP - 符号
- LISP - 向量
- LISP - 集合
- LISP - 树
- LISP - 哈希表
- LISP - 输入与输出
- LISP - 文件 I/O
- LISP - 结构
- LISP - 包
- LISP - 错误处理
- LISP - CLOS
- LISP 有用资源
- Lisp - 快速指南
- Lisp - 有用资源
- Lisp - 讨论
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) 为真。 |
max | 它比较两个或多个参数,并返回最大值。 | (max A B) 返回 20 |
min | 它比较两个或多个参数,并返回最小值。 | (min A B) 返回 10 |
布尔值上的逻辑运算
Common LISP 提供三个逻辑运算符:and、or 和 not,它们对布尔值进行操作。假设A的值为 nil,B的值为 5,则:
运算符 | 描述 | 示例 |
---|---|---|
and | 它接受任意数量的参数。参数从左到右求值。如果所有参数都求值为非 nil,则返回最后一个参数的值。否则返回 nil。 | (and A B) 将返回 NIL。 |
or | 它接受任意数量的参数。参数从左到右求值,直到一个参数求值为非 nil,在这种情况下,返回该参数的值,否则返回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 | 这将返回其参数的按位非。如果没有给出参数,则结果为 -1,这是此运算的单位元。 | (lognor a b) 将得到 -62, |
logeqv | 这将返回其参数的按位逻辑等价(也称为异或非)。如果没有给出参数,则结果为 -1,这是此运算的单位元。 | (logeqv a b) 将得到 -50 |
广告