2016-12-17 1 views
0

Ich versuche, eine Funktion zu schreiben, diese Art von Liste zu sortieren:eine Liste von Listen in Common Lisp Sortierung

((1 A) (2 E) (4 D))

Ich fand die eingebaute Funktion Art in Common Lisp, aber ich kann tu was ich will.
Dies sollte das Ergebnis sein:

'((1 A) (4 D) (2 E)) 

Ich möchte die Liste durch das zweite Element jeder Listen alphabetisch sortieren.

Dies ist, was ich getan habe:

(sort '((1 A) (4 D) (2 E)) #'char-lessp :key #'second) 

Wie auch immer, ich würde verstehen, wie man mit einer bestimmten Funktion eine Liste sortieren, mit: key‘.

Vielen Dank.

Antwort

2

sollten Sie verwenden:

(sort '((1 A) (4 E) (2 D)) #'string<= :key #'second) 

Der Grund dafür ist, dass char-lessp Zeichen vergleicht und A, E und D sind nicht Zeichen, sondern Symbole. Die Funktion kann verwendet werden, um ihre Namen zu vergleichen, die Strings"A", "E" und "D" sind. Zum Beispiel:

CL-USER> (string= 'symbol "SYMBOL") 
T 
CL-USER> (symbol-name 'symbol) 
"SYMBOL" 

Beachten Sie, dass die Vergleichsoperatoren auf Strings haben zwei Versionen, für Groß- und Kleinschreibung und Groß- und Kleinschreibung Vergleiche:

CL-USER> (string= "a" "A") 
NIL 
CL-USER> (string-equal "a" "A") 
T 
CL-USER> (string= 'a "a") 
NIL 
CL-USER> (string-equal 'a "a") 
T