Emacs lisp 手册中关于函数 nconc 的状态如下:
由于 nconc 的最后一个参数本身没有被修改,因此使用常量列表是合理的,例如 '(4 5),如上例所示。出于同样的原因,最后一个参数不必是列表
我确实可以写
(setq x '(1 2 3))
=> (1 2 3)
(nconc x 0)
=> (1 2 3 . 0)
但这会产生一个完全损坏的列表:
(length x)
=> eval: Wrong type argument: listp, 0
(butlast x)
=> butlast: Wrong type argument: listp, 0
- 如何检索原始列表?
(reverse (cdr (reverse '(1 2 3 . 0))))
也不削减它。 - 在哪些情况下这是一个有用的模式?在标准发行版中有些功能在
minibuffer.el
使用它,特别是completion-all-completions
之类的。