我正在尝试编写一个 Lisp 函数 ordered,如果给定的列表按升序或降序排序,则返回 True。
到目前为止,我有 3 个辅助函数可以按任何一种方式进行排序,然后是一个比较它们的函数,最后是确定它们是否已排序的函数。
我在有序 (L) 函数中调用比较时遇到问题。似乎每次都在破坏列表。也许我的整个实现是错误的。感谢您的关注!
(defun ascending (L)
(sort L #'<)
)
(defun descending (L)
(sort L #'>)
)
(defun compare (original sorted)
(cond
; I made this return the opposite for
; easier usage in the condition of ordered
((equal original sorted) T)
)
)
(defun ordered (L)
;(cond
(print L)
(setq temp1 L)
(compare L (ascending temp1))
(print temp1)
(print L)
;)
)
最佳答案
您不需要对列表进行排序。
你只需要查看每对连续的元素,看看它们是升序还是降序。
对于简单的三行代码,您需要运算符 or
, every
, >=
, <=
, 和 rest
.请记住,列表只是一个 cons 单元链,rest
仅提供对第二个单元格的引用,即 every
可以将多个列表作为参数。然后,您可以将问题描述直接翻译成 Lisp 代码。
关于sorting - Lisp - 检查列表是否已排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5613874/