2012-03-27 4 views

Antwort

4
(sort L #'<) 

oder

(sort (copy-list L) #'<) 

, wenn Sie nicht wollen, L an Ort und Stelle zu ändern. Wenn Sie möchten, später verwenden L auf der sortierten Liste zu bekommen, rebind es:

(setf L (sort L #'<)) 
+2

Sie meinen: '(setf L (sort L # '<))'. Wenn Sie den Rückgabewert nicht in die Variable "L" zurückschreiben, ist "L" nicht die sortierte Liste. Wenn der Wert von "L" aus einem Listenliteral abgeleitet wird, wie der "Defvar" des Schülers in der Frage, ist dies ein undefiniertes Verhalten. – Kaz

+0

@Kaz ist es in der Tat destruktiv. Danke, dass du es aufgezeigt hast. – keyser

+0

@Kaz: natürlich muss der Ausgang irgendwo hingehen, aber das OP muss nicht 'L' zurücksetzen; Beispielsweise können sie das Ergebnis von "Sortieren" an eine Funktion übergeben. Wo wird das undefinierte Verhalten dokumentiert? –

Verwandte Themen