關於功能nconc該Emacs lisp manual狀態:建立一個非列表尾的列表有什麼意義?
由於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
等。
BTW,使用文字數據,如''(1 2 3)',作爲'nconc'的非最後一個參數在技術上沒有問題。文字基準應該被認爲是不變的。 – 2015-02-18 06:26:31