2016-12-29 5 views
0

アルファベット順に( "a"から "z"へ)文字だけで構成されたリストをソートする方法はありますか?(list c m a y k)=>(list a c k m y)?Lispでcharのリストをソートする

私をそのようなものを見つけたので、私はこれで問題が解決できると思っていませんでした:

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

出力が文字ではなく記号であることを意味しますか? (リスト(コピーリスト)(cmayk)))(並べ替えリスト# '文字列<))' => '(ACKMY)' – jkiiski

+0

ありがとう、私はすでに試してみましたが、 – Daesos

+0

'(cmayk)'は文字のリストではありません。記号のリストです。 –

答えて

0

文字をASCII番号に変換し、番号をソートして文字に戻すことができます。

(define l (list #\C#\m #\a #\y #\k)) 
(map integer->char 
    (sort (map char->integer l) <)) 

出力:ラケット、Lispの/スキーム誘導体のコードで、次の(c m a y k)の場合

'(#\a #\C#\k #\m #\y) 
0

、あなたはシンボルのリストを持っています。 (#\A #\C#\K #\M #\Y)の場合は、文字のリストがあります。

あなたがシンボル名に応じたシンボルのリストをソートしたい場合、あなたは(私はリストは以下の変数fooにバインドされていると仮定しています)行うことができます。:key #'symbol-nameは可能性があること

(setq foo (sort foo #'string< :key #'symbol-name)) 

注意string<は実際には "文字列指定子"で動作するので余計だと主張しましたが、明示的に言うならシンボル名に基づいてリストをソートしようとしていることが人間の読者にとってははっきりしています。

関連する問題