[英]Sorting a list of char in Lisp
有沒有一種方法可以對僅由字母組成的列表進行排序(從“ a”到“ z”),例如:(list cmayk)=>(list ackmy)?
我沒有找到這樣的東西,所以我認為這可以解決問題:
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),這不是我想要的結果。
可以將字符轉換為其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)
對於(cmayk)
,您有一個符號列表。 在(#\\A #\\C #\\K #\\M #\\Y)
,您有一個字符列表。
如果要根據符號名稱對符號列表進行排序,可以這樣做(我假設該列表綁定到下面的變量foo):
(setq foo (sort foo #'string< :key #'symbol-name))
注意:key #'symbol-name
可能被認為是多余的,因為string<
實際上是在“字符串指定符”上運行的,但是對於人類讀者來說,您確實打算根據符號名對列表進行排序如果你這么明確地說。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.