讨论操作list的各种处理 push append等

Emacs Lisp Manual 中提到的「破坏性」(Destructively / Destructive)指会修改 List 结构的操作,push 并没有没有破坏性,因为它不会修改任何既有 List 的结构:

(push path load-path)
;; 展开
(setq load-path (cons path load-path))

append 也没有破坏性,因为它虽然必须修改列表的结构,但它事先做了必要的拷贝:

(append list1 list2)
;; 有一些类似于
(nconc (copy-sequence list1) list2)

此外,破坏性不等于 In-place 地修改参数,常常还是要依赖于返回值,所以得用 (setq foo (... foo ...))

2 个赞