是否有办法按字母顺序(从“a”到“z”)对仅由字符组成的列表进行排序,例如:( list c m a y k)=> (列出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),这不是我想要的结果。
答案 0 :(得分:0)
可以将字符转换为ASCII码,对数字进行排序并转换回字符。以下是Racket中的代码,一个Lisp / Scheme派生词:
(define l (list #\c #\m #\a #\y #\k))
(map integer->char
(sort (map char->integer l) <))
输出:
'(#\a #\c #\k #\m #\y)
答案 1 :(得分:0)
在(c m a y k)
的情况下,您有一个符号列表。
在(#\A #\C #\K #\M #\Y)
的情况下,您有一个字符列表。
如果你想根据符号名称对符号列表进行排序,你可以这样做(我假设列表绑定到下面的变量foo):
(setq foo (sort foo #'string< :key #'symbol-name))
请注意,:key #'symbol-name
可能被认为是多余的,因为string<
实际上是对字符串指示符&#34;进行操作,但对于人类读者来说,确实更为清楚如果您明确说明,则打算根据符号名称对列表进行排序。