0

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

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

我一直在尝试自己学习 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”)。

4

1 回答 1

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更好:)

于 2011-05-26T07:39:20.753 回答