在 Common Lisp 中对列表列表进行排序

Sorting a list of lists in Common Lisp

我正在尝试编写一些函数来对此类列表进行排序:

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

我在 Common Lisp 中找到了内置函数 sort,但我无法如愿。
这应该是结果:

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

我想按每个列表的第二个元素按字母顺序对列表进行排序。

这是我所做的:

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

无论如何,我会理解如何使用 :key' 对具有特定功能的列表进行排序。

谢谢。

你应该使用:

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

原因是char-lessp比较的是字符,而AED不是字符,而是符号。函数string<可以用来比较它们的名字,即字符串"A""E""D"。例如:

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

请注意,字符串比较运算符有两个版本,用于区分大小写和不区分大小写的比较:

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