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

发布于 2024-11-09 17:04:47 字数 568 浏览 6 评论 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”)。

Given a list of any length and data type calculate:

  • Lower item
  • Higher item
  • Symbols
  • Average
  • Reversed list (implementing the function)

I've been trying to learn lisp by myself, since my class is kinda useless (read my other question =_=;), and I've done this:

(defun higher(l)
    (let (x)
        (setf x (first (sort l #'>)))))

Then it didn't order symbols, of course... so I tried this:

(defun higher(l)
    (let ((x 0))
        (dolist (a l)
            (setf a (coerce a 'integer))
            (if (> a x)
                (setf x a)))
        x))

but coerce is not helping me to make my symbols integers... thanks in advance for your help, and also, I would like to know if I'm formatting well (I wasn't taught to use "let").

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

他不在意 2024-11-16 17:04:47

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

在比较符号之前,您可以使用 符号名称

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

所以现在您可以使用#'字符串>

编写比较>的函数您可以使用 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好多了:)

Function #'Char> won't work with symbols, because symbol is not type character.

Before you compare symbols you can use symbol-name:

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

So now you can use #'string>

To write function which compare> any data type you can use typecase.
Small example:

(defun compare> (x y)
  (when (subtypep (type-of x) (type-of y))
    (typecase (and x y)
      (integer (> x y))
      (character (char> x y)))))

As Terje said, you shouldn't use sort, reduce is much more better :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文