在Lisp中排序混合数据类型的列表

问题描述

| 给定任何长度和数据类型的列表,请计算: 下层物品 较高的项目 符号 平均 反向清单(实现功能) 我一直在尝试自己学习口齿不清,因为我的课有点没用(请阅读我的其他问题= _ =;),我已经这样做了:
(defun higher(l)
    (let (x)
        (setf x (first (sort l #\'>)))))
然后,它当然没有订购符号...所以我尝试了这个:
(defun higher(l)
    (let ((x 0))
        (dolist (a l)
            (setf a (coerce a \'integer))
            (if (> a x)
                (setf x a)))
        x))
但是强制性并不能帮助我使符号变为整数……预先感谢您的帮助,而且,我想知道我的格式化是否正确(我没有被教过使用“ let” )。     

解决方法

函数#\'Char>不能与符号一起使用,因为symbol不是类型字符。 在比较符号之前,可以使用符号名称:
(symbol-name \'a)
CL-USER> \"A\"
所以现在您可以使用#\'string> 要编写比较任何数据类型的函数,可以使用大小写。 小例子:
(defun compare> (x y)
  (when (subtypep (type-of x) (type-of y))
    (typecase (and x y)
      (integer (> x y))
      (character (char> x y)))))
正如Terje所说的,您不应该使用sort,reduce会更好:)