Elisp:无法掌握setq的效果和排序

时间:2011-08-28 19:00:29

标签: elisp

在Emacs中评估以下代码时,我得到(2 3)作为x的最终值。我期待(1 2 3)。我错过了什么?

(setq x '(2 1 3))
(sort x '<)
x

2 个答案:

答案 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