Practical Common Lisp学习笔记(5)常用函数宏备忘3
Practical Common Lisp学习笔记(五)常用函数宏备忘3
初等数学
FLOOR函数 向负无穷方向截断,返回小于或等于实参的最大整数 P105
CEILING函数 向正无穷方向截断,返回大于或等于参数的最小整数 P105
TRUNCATE函数 向零截断,对于正实参而言,它等价于FLOOR,对于负实参则等价于CEILING P105
MOD函数 两个实数截断相除得到的模 P105
REM函数 两个实数截断相除得到的余数 P105
1+函数 表示从一个数字增加一个的简化方式,返回一个新值 P106
1-函数 表示从一个数字减少一个的简化方式,返回一个新值 P106
INCF宏 接受两个数字类型的参数,第一个参数必须是变量,第一个变量根据第二个参数增加,如果只传入一个参数默认是一,修改参数的值 P106
DECF宏 接受两个数字类型的参数,第一个参数必须是变量,第一个变量根据第二个参数减少,如果只传入一个参数默认是一,修改参数的值 P106
数值比较
ZEROP函数 用来测试一个单一实数是否等于零 P106
MINUSP函数 用来测试一个单一实数是否小于零 P106
PLUSP函数 用来测试一个单一实数是否大于零 P106
EVENP谓词 用来测试单一整数参数是否为偶数 P106
ODDP谓词 用来测试单一整数参数是否为奇数 P106
高等数学参数
LOG,EXP,EXPT,SIN,COS,TAN,ASIN,ACOS,ATAN,SINH,COSH,TANH,ASINH,ACOSH,ATANH。 P107
字符
#\ 字符读取语法(特定字符的代替语法#\后跟名字,space,newline,Tab,Page,rubout,linefeed,return,backspace) P107
CHAR=函数 可以接受任意数量的实参并只在他们全部是相同字符时才返回真。 P107
CHAR_EQUAL函数 可以接受任意数量的实参并只在他们全部是相同字符时才返回真,大小写无关。 P107
数值相似物 | 大小写相关 | 大小写无关 |
= | CHAR= | CHAR-EQUAL |
/= | CHAR/= | CHAR-NOT-EQUAL |
< | CHAR< | CHAR-LESSP |
> | CHAR> | CHAR-GREATERP |
<= | CHAR<= | CHAR-NOT-GREQTERP |
>= | CHAR>= | CHAR-NOT-LESSP |
字符串
“”字符串 P108
数值相似物 | 大小写相关 | 大小写无关 |
= | STRING= | STRING-EQUAL |
/= | STRING/= | STRING-NOT-EQUAL |
< | STRING< | STRING-LESSP |
> | STRING> | STRING-GREATERP |
<= | STRING<= | STRING-NOT-GREQTERP |
>= | STRING>= | STRING-NOT-LESSP |
向量
VECTOR函数 生成含有特定值的定长向量,该函数接受任意数量的参数并返回一个新分配的含有那些参数的定长向量 P111
#(…)是用来使用向量的字面表示形式 P112
MAKE-ARRAY函数 用来创建任何维度的数组以及定长和变化的向量
1、创建定长向量,接受:initial-element参数可以不带,需指定长度 P112
2、创建变长向量,接受:fill-pointer参数,需指定最大长度 P112
3、创建变长向量,使用:adjustable,可任意变长 P113
4、使用:element-type指定向量的自类型 P113
P112
VECTOR-PUSH函数 向可变向量的尾部添加一个元素 P112
VECTOR-POP函数 返回最近推入的项,并在该过程中递减填充指针 P112
ADJUST-ARRAY函数 以超出扩展向量长度的多种方式来调整数组 P113
VECTOR-PUSH-EXTEND函数 向一个可调整的向量添加元素 P113
作为序列的向量
LENGTH函数 返回一个序列的长度 P114
ELT函数 允许通过一个整数索引来访问个别元素(支持SETF) P114
序列迭代函数
P114
名称 | 所需参数 | 返回 |
COUNT | 项和序列 | 序列中出现某项的次数 |
FIND | 项和序列 | 项或NIL |
POSITION | 项和序列 | 序列中的索引或NIL |
REMOVE | 项和序列 | 项的实例被移除后的序列 |
SUBSTITUTE | 新项,项和序列 | 项的实例被新项替换后的序列 |
参数 | 含义 | 默认值 |
:test | 两参数函数用来比较元素(或由:key函数解出的值)和项 | EQL |
:key | 单参数函数用来从实际的序列元素中解出用于比较的关键字值NIL表示原样采用序列元素 | NIL |
:start | 子序列的起始索引(含) | 0 |
:end | 子序列的终止索引(不含)。NIL表示到序列的结尾 | NIL |
:count | 数字代表需要移除或替换的元素个数,NIL代表全部。(仅用于REMOVE和SUBSTITETE) | NIL |
高阶函数变体
P116
一类,变体被命名为与基本函数相同的名字并带有一个追加-IF,这些函数用于计数,查找,移除以及替换序列中那些函数参数返回真元素。
另一类,变体以-IF-NOT后缀命名并计数,查找,移除以及替换参数不返回真的元素。
REMOVE-DUPLICATES函数 接受序列作为仅需的必要参数,并将其中每个重复的元素移除到只剩下一个实例
整个序列上的操作
COPY-SEQ函数 返回的序列包含与其参数相同的元素(新序列) P117
REVERSE函数 返回的序列则含有顺序相反的相同元素(新序列) P117
CONCATENATE函数 创建一个将任意数量序列连接在一起的新序列(第一个参数是类型描述符VECTOR,LIST,STRING) P117
排序与合并
SORT函数 接受一个序列和一个由两个实参组成的谓词,返回该序列排序后的版本,只保证结果是已排序的并可能重排等价元素(有破坏性了,接受:key) P118
STABLE-SORT函数 接受一个序列和一个由两个实参组成的谓词,返回该序列排序后的版本,只保证不会重排任何被谓词视为等价的元素。(有破坏性,接受:key) P118
MERGE函数 接受两个序列和一个谓词,并返回按照该谓词合并这两个序列所产生的序列,第一个参数是类型描述符,也接受:key P118
子序列操作
SUBSEQ函数 解出序列中从一个索引开始并延续到一个特定的索引终止或结尾的子序列(支持SETF) P118
FILL函数 将一个序列的多个元素设置到单个值上,接受:start :end将效果限制在一个给定的自序列上 P119
SEARCH函数 与POSITION函数相似不过第一个参数是一个序列不是单独的项 P119
MISMATCH函数 返回两个序列第一对不匹配的元素索引,接受:key :test :start1 :end1 :start2 :end2 :from-end P119
序列谓词
EVERY函数 在谓词失败时返回假,如果谓词总被满足返回真。 P119
SOME函数 返回由谓词所返回的第一个非NIL值 P119
NOTANY函数 将在谓词满足时返回假 P119
NOTEVERY函数 在谓词失败时返回真 P119
序列映射函数
MAP函数 接受一个n-参数函数和n个序列,MAP返回新序列,它由那些将函数应用在序列的相继元素上所得到的结果组成。需告知序列类型。 P120
MAP-INTO函数 不产生给定类型的新序列,而是将结果放置在一个作为第一个参数传递的序列中,如果长度不同只影响与最短序列元素数量相当的那些元素,其中也包括那个将被映射到序列。 P120
REDUCE函数 映射在单个序列上,先将一个两参数函数应用到序列的最初两个元素上,再将函数返回值和序列后续元素继续用于该函数。接受关键字参数(:key :from-end :start :end ,REDUCE专用的:intial-value) P120
哈希表
MAKE-HASH-TABLE函数 创建一个哈希表,其认定两个键等价,并且仅当它们在EQL的意义上是相同的对象。(:test,只能是EQ,EQL,EQUAL,EQUALP) P121
GETHASH函数提供了对哈希表元素的访问 P121
MULTIPLE-VALUE-BIND宏 利用多重返回值 P121
REMHASH函数 移除一个键值 P122
CLRHASH函数 完全清除哈希表中的所有键值 P122
哈希迭代
MAPHSH函数 在哈希表的每一个键值对上调用一次该函数 P122
列表处理
CONS函数 创建点对单元 P123
CAR函数 获得单对单元第一个,支持SETF P124
CDR函数 获得单对单元第二个,支持SETF P124
LIST函数 创建链表 P125
函数名字中的N含义是non-consing一般具有副作用的函数 P128
NCONC函数 是APPEND的回收性版本 P128
DELETE族是REMOVE族的回收性版本
列表处理函数
FIRST函数 第一个元素(SECOND到TENTH) P131
REST函数 除了第一个元素的所有元素 P131
CAR/CDR系列函数 放在C和R中间的每一个A代表CAR,每一个D代表CDR P131
NTH函数 接受一个索引一个列表并返回列表中第n个(从0开始)元素,(类似的NTHCDR,返回这个元素的CDR操作结果)
函数 | 描述 |
LAST | 返回列表的最后一个点对单元,带有一个整数参数时,返回最后n哥点对单元 |
BUTLAST | 返回列表的一个副本,最后一个点对单元除外。带有一个整数参数时,排除最后n个单元 |
NBUTLAST | BUTLAST的回收性版本。可能修改并返回其参数列表但缺少可靠的副作用 |
LDIFF | 返回列表知道某个给定点对单元副本 |
TAILP | 返回真,如果给定对象是作为列表一部分的点对单元 |
LIST* | 构造一个列表来保存除最后一个参数外的所有参数,然后让最后一个参数成为这个列表最后一个节点 的CDR。换句话说,它组合了LIST和APPEND |
MAKE-LIST | 构造一个n项的列表。该列表的初试元素是NIL或者通过:initial-element关键字参数所指定的值 |
REVAPPEND | REVERSE和APPEND组合。像REVERSE那样求逆第一个参数,再将其追加到第二个参数上 |
NRECONC | REVAPPEND的回收性版本。像NREVERSE那样求逆第一个参数,再将其追加到第二个参数上。没有可靠的副作用 |
CONSP | 用来测试一个对象是否为点对单元谓词 |
ATOM | 用来测试一个对象是否不是点对单元的谓词 |
LISTP | 用来测试一个对象是否为点对单元或NIL谓词 |
NULL | 用来测试一个对象是否为NIL的谓词。功能上等价于NOT但在测试空列表而非希尔假时问文体上推荐使用 |
映射
MAPCAR函数 与每个点对单元中的第一个元素映射
MAPLIST函数 与每个点对单元映射
MAPCAN函数 与MAPCAR相似破坏性版本
MAPCON函数 与MAPLIST相似破坏性版本
MAPC函数 只返回第一个列表实参,当映射函数的副作用有用时才有用与MAPCAR/MAPCAN类似
MAPL函数 只返回第一个列表实参,当映射函数的副作用有用时才有用MAPLIST、MAPCON类似