我正在尝试编写一些函数来对这种类型的列表进行排序:
((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'。
对具有特定功能的列表进行排序谢谢。
答案 0 :(得分:2)
您应该使用:
(sort '((1 A) (4 E) (2 D)) #'string<= :key #'second)
原因是char-lessp
比较字符,A
,E
和D
不是字符,而是符号。函数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