14.9.1 列表排序

Emacs 内置了用于列表排序的函数,顾名思义就是 sortsort 函数接收两个参数:待排序列表,以及一个判断条件,用于确定两个列表元素中第一个是否小于第二个。

如前所述(see Using the Wrong Type Object as an Argument),判断条件是一个用于判断某属性真假的函数。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 的列表。)