Emacs 内置了用于列表排序的函数,顾名思义就是 sort。sort 函数接收两个参数:待排序列表,以及一个判断条件,用于确定两个列表元素中第一个是否小于第二个。
如前所述(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 的列表。)