给定任意长度和数据类型的列表计算:
- 下项
- 较高的项目
- 符号
- 一般
- 反向列表(实现功能)
我一直在努力自学 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-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 所说,你不应该使用排序,reduce好多了:)
关于lisp - 在 lisp 中排序混合数据类型列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6128658/