求Common Lisp中操作cons的可破坏性与必破坏性函数列表
Common Lisp 操作Cons的破坏性函数列表
允许但不要求破坏性的函数
这类函数的语义允许对输入的cons结构进行破坏性修改,但具体实现可选择返回新结构而非修改原结构(通常在性能优化场景下会采用破坏性操作):
NCONC:拼接多个列表,允许修改最后一个输入列表的cdr来连接后续列表NREVERSE:反转列表,允许修改原列表的cdr指针构建反转后的列表NSUBST:破坏性版本的元素替换,允许修改原列表中的cons单元NSUBSTIF:基于谓词的破坏性替换,允许修改原cons单元NSUBST-NOT:反向谓词的破坏性替换函数NSUBSTIF-NOT:基于反向谓词条件的破坏性替换函数NUNION:集合并集的破坏性实现,允许修改输入列表结构NINTERSECTION:集合交集的破坏性实现NSET-DIFFERENCE:集合差集的破坏性实现NSET-EXCLUSIVE-OR:集合对称差的破坏性实现
必然具有破坏性的操作
这类操作一定会修改输入的cons单元的car或cdr部分,调用后原cons结构会被直接改变:
RPLACA:直接修改cons单元的car字段RPLACD:直接修改cons单元的cdr字段POP:宏,通过SETF修改列表的cdr,移除并返回第一个元素PUSH:宏,通过SETF修改列表结构,将元素添加到列表头部SETF操作CAR/CDR:例如(setf (car my-cons) new-val)或(setf (cdr my-cons) new-list),底层对应RPLACA和RPLACD
内容的提问来源于stack exchange,提问作者Robert Dodier
相关产品推荐
相关产品推荐

