在Emacs中评估以下代码时,我得到(2 3)作为x的最终值。我期待(1 2 3)。我错过了什么?
(setq x '(2 1 3))
(sort x '<)
x
答案 0 :(得分:8)
如果您阅读sort
的文档,您会发现返回排序列表,输入列表修改副作用。它并没有说参数列表将包含排序结果 - 它只是由排序算法以某种方式修改。或者,简而言之:sort
破坏性。
因此,您需要绑定/分配sort
的返回值:
elisp> (setq x '(2 1 3))
(2 1 3)
elisp> (setq x (sort x '<))
(1 2 3)
elisp> x
(1 2 3)
答案 1 :(得分:1)
我对elisp没有多少经验,但是由于car和cdr的实现,它的行为正常。查看http://www.gnu.org/software/emacs/elisp/html_node/Rearrangement.html#Rearrangement