是否有一种方法可以对仅按字母顺序(从" a"到" z")组成的字符列表,例如:(列表c m y y k)=>(列表a c k m y)?
我没有找到类似的东西,所以我认为这可以解决问题:
cl-prompt> (setq q (mapcar 'string '(c m a y k))) => ("C" "M" "A" "Y" "K")
cl-prompt> (sort q 'string<) => ("A" "C" "K" "M" "Y")
在这一点上,我已经卡住了,因为通过使用char转换器,输出将不是我想要的列表。示例:
char (string 'a) 0 => #A
,我将拥有一个列表:(# a# c# k# m# y),这不是我想要的结果。
在(c m a y k)
的情况下,您有一个符号列表。对于(#A #C #K #M #Y)
,您有一个字符列表。
如果要根据符号名称对符号列表进行排序,则可以执行(我假设列表绑定到下面的变量foo):
(setq foo (sort foo #'string< :key #'symbol-name))
请注意,:key #'symbol-name
可以被认为是多余的,因为string<
实际上在"字符串指定器"上运行,但是对于人类读者来说,您确实打算要根据符号名称对列表进行对列表进行排序,如果您这么说。明确。
一个人可以将字符转换为其ASCII编号,对数字进行排序并转换回字符。以下是球拍中的代码,一个LISP/方案衍生物:
(define l (list #c #m #a #y #k))
(map integer->char
(sort (map char->integer l) <))
输出:
'(#a #c #k #m #y)