Emacs 包含一个用于排序列表的函数,称为(你可能猜到的)sort
。sort
函数接受两个参数,要排序的列表和一个断言,该断言确定两个列表元素中的第一个是否小于第二个。
正如我们之前所见(see 使用错误类型的对象作为参数),断言是确定某个属性是真还是假的函数。sort
函数将根据断言使用的任何属性重新排序列表;这意味着 sort
可以根据非数值标准对非数值列表进行排序—例如,它可以对列表进行字母排序。
在对数值列表进行排序时,使用函数 <
。例如,
(sort '(4 8 21 17 33 7 21 7) '<)
产生以下结果:
(4 7 7 8 17 21 21 33)
(请注意,在此示例中,两个参数都引用了,以便在传递给 sort
之前不对符号进行求值。)
对由 recursive-lengths-list-many-files
函数返回的列表进行排序很简单;它使用 <
函数:
(sort (recursive-lengths-list-many-files '("./lisp/macros.el" "./lisp/mailalias.el" "./lisp/hex-util.el")) '<)
产生以下结果:
(29 32 38 71 82 90 95 178 180 218 263 283 321 324 480)
(请注意,在此示例中,sort
的第一个参数未引用,因为必须评估表达式以产生传递给 sort
的列表。)