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

在lisp中对混合数据类型列表进行排序,lisp,symbols,clisp,Lisp,Symbols,Clisp,给定任意长度和数据类型的列表,计算: 下项 较高项目 象征 平均值 反向列表(实现该功能) 我一直在尝试自己学习lisp,因为我的课程有点没用(请阅读我的其他问题),我已经做到了: (defun higher(l) (let (x) (setf x (first (sort l #'>))))) 当然,它没有订购符号。。。所以我试了一下: (defun higher(l) (let ((x 0)) (dolist (a l)

给定任意长度和数据类型的列表,计算:

  • 下项
  • 较高项目
  • 象征
  • 平均值
  • 反向列表(实现该功能)
我一直在尝试自己学习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”)。

函数#'字符>不适用于符号,因为符号不是字符类型

在比较符号之前,可以使用:

现在您可以使用#'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,这会更好:)

函数#'Char>不会与符号一起工作,因为符号不是字符类型

在比较符号之前,可以使用:

现在您可以使用#'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,这更好:)

从编写一个可以比较任意类型的两个值的函数开始。如果你展示你知道如何使用递归,你的老师可能会很感激。同时看看你可以用什么做,例如……但是你用什么来比较任何类型的值呢?我似乎在任何地方都找不到好的lisp文档(只是教程之类的东西…),你已经用#'<来比较数字了。有一些类似的函数#'string<和#'char<可能满足您的需要。由于您应该能够比较任何数据类型,因此您需要决定并实现一个项目小于另一个项目的一般含义。首先编写一个可以比较任何类型的两个值的函数。如果您展示您知道如何使用递归,您的老师可能会很感激。此外,您还需要了解如何处理,例如……但您使用什么来比较与任何类型的值进行比较?我似乎在任何地方都找不到好的lisp文档(只是教程之类的东西…),你已经用#'<来比较数字了。有一些类似的函数#'string<和#'char<可能满足您的需要。由于您应该能够比较任何数据类型,因此您需要确定并实现一个项目比另一个项目小的一般含义。