14.9.1 列表排序

Emacs 包含一个用于排序列表的函数,称为(你可能猜到的)sortsort 函数接受两个参数,要排序的列表和一个断言,该断言确定两个列表元素中的第一个是否小于第二个。

正如我们之前所见(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 的列表。)