在Common Lisp中对列表进行排序

时间:2016-12-17 16:03:30

标签: list sorting character common-lisp alphabetical-sort

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

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

我在Common Lisp中找到了内置函数排序,但我不能做我想做的事 这应该是结果:

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

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

这就是我所做的:

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

无论如何,我会理解如何使用:key'。

对具有特定功能的列表进行排序

谢谢。

1 个答案:

答案 0 :(得分:2)

您应该使用:

(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