2016-09-28 2 views
0

Sortierung Ich habe eine Liste von Listen dieser Form:eine Liste von Listen in Lisp

testlist((a 22) (b 2) (c 5)) 

Mein Ziel ist es, die Testliste auf die Zahlen Werte (5 zuerst größten Werte) zu sortieren. Gibt es eine Möglichkeit, dies zu erreichen, ohne die Liste durchlaufen und Zahlen miteinander vergleichen zu müssen?

Antwort

4

In ANSI Common Lisp:

(sort (copy-list '((a 22) (b 2) (c 5))) #'< :key #'second) 
-> ((B 2) (C 5) (A 22)) 

Die copy-list gibt es da sort die Eingabeliste clobbers. Wir brauchen das, weil unsere Eingabeliste ein Literal ist, aber selbst wenn dies nicht der Fall ist, möchten Sie manchmal das ursprüngliche Objekt, das Sie sortieren möchten, nicht verwürfeln.