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

标签 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))

但强制​​并不能帮助我使我的符号成为整数...在此先感谢您的帮助,而且,我想知道我的格式是否正确(我没有被教导使用“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/

相关文章:

json - 为解析 JSON 字符串的递归调用获取正确的子序列

lisp - 在 lisp 中多次引用点? (例如 '' ''' a)

java - Java 程序末尾不需要的 % 符号

c++ - 地址符号 & 在构造函数中的含义是什么?

function - 这个 Lisp 函数有什么问题?

lisp - 如何写一个clisp可执行文件?

lisp - 如何避免在 cond 子句 LISP 中重复代码?

lisp - 如何用 lisp 替换文件中的字符串?

linux - 如何使用 "ln"在 linux 上为目录创建链接?

lisp - Lisp 中的实例变量?