在 Lisp 中对混合数据类型列表进行排序
给定任何长度和数据类型的列表,计算:
- 较低的项目
- 较高的项目
- 符号
- 平均
- 反转列表(实现该功能)
我一直在尝试自己学习 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
函数#'Char>不适用于符号,因为符号不是类型字符。
在比较符号之前,您可以使用 符号名称:
所以现在您可以使用#'字符串>
编写比较>的函数您可以使用 typecase 的任何数据类型。
小例子:
正如Terje所说,你不应该使用排序,reduce好多了:)
Function #'Char> won't work with symbols, because symbol is not type character.
Before you compare symbols you can use symbol-name:
So now you can use #'string>
To write function which compare> any data type you can use typecase.
Small example:
As Terje said, you shouldn't use sort, reduce is much more better :)