CAR 订单清单

Order Lists by CAR

我需要能够比较列表中的两辆汽车,以便在 LISP 中对它们进行排序。

列表'(e d) (a b)

我想比较汽车(e 和 a)。这使用 eql 工作。如果它们不匹配,我想按字母顺序排列列表,所以 (a b) (e d)。 我错过了可以看到哪个字符是 'bigger' 的部分,所以先检查 e 还是 a。我试过将它们转换为 ascii 码,但这对 (car a) 不起作用。使用“<”和“>”等算术运算符也不起作用。有没有人知道如何做到这一点?

符号不同于字符串。

CL-USER> (symbol-name 'foo)
"FOO"

可以按照您感兴趣的方式比较字符串(字符序列)。

CL-USER> (string> "FOO" "BOO")
0
CL-USER> (string< "FOO" "BOO")
NIL

使用 string> 而不使用 symbol-name:

CL-USER 6 > (string> 'a 'b)
NIL

CL-USER 7 > (string< 'a 'b)
0

为了完整起见,下面是您应该如何在 sort to achieve desired result (sort is destructive- modifies used sequence, so I also used copy-tree 中使用它来避免这种影响):

(let ((data '((e d) (a b))))
  (sort (copy-tree data)
        (lambda (x y) (string< (car x) (car y)))))

((A B) (E D))