sorting - Lisp - 检查列表是否已排序

标签 sorting comparison lisp

我正在尝试编写一个 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/

相关文章:

lisp - 垂直对齐 float 在小数点上

sorting - Elasticsearch-如何在排序后应用大小

python - 递归地按键对嵌套的 OrderedDict 进行排序

java - 添加到 Set 时按枚举排序

language-agnostic - 添加 MIN_VALUE 如何将整数比较为无符号?

Java:比较整数和字符串 - 性能

c# - Nullable <= 与 == 比较结果

lisp - 单引号字符串 checkin 列表

emacs - 如何获取对 Emacs Slime 中最后返回对象的引用

algorithm - 随机快速排序划分概率