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

时间:2011-05-25 17:51:05

标签: lisp symbols clisp

给出任何长度和数据类型的列表计算:

  • 下项目
  • 更高的项目
  • 符号
  • 平均
  • 反向列表(实现功能)

我一直在努力学习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))

但是胁迫并没有帮助我制作符号整数...提前感谢您的帮助,而且,我想知道我是否格式化(我没有被教导使用“让”)

1 个答案:

答案 0 :(得分:3)

功能#'Char>不适用于符号,因为符号不是类型字符。

在比较符号之前,您可以使用symbol-name

(symbol-name 'a)
CL-USER> "A"

所以现在你可以使用#'string>

编写比较>的函数您可以使用的任何数据类型typecase。 小例子:

(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要好得多:)