如何查看列表是否在常见的lisp中排序?

时间:2016-03-17 18:46:57

标签: lisp

如何确定列表是否按常见的lisp中的升序排序?我是在正确的轨道上吗?

(defun is-sorted (lst)
  (cond
    ((null lst ) T) 
    ((<= car lst (lst cdr lst)))
    ((is-sorted (cdr lst) nil))))

(print (is-sorted '(1 2 3 4 5 6 7)))

1 个答案:

答案 0 :(得分:4)

您希望浏览列表,并在每个步骤检查当前元素是否大于下一个元素。如果是,您可以跳过其余部分并返回false。如果到达目的地,请返回true。

(defun sortedp (list)
  (cond ((endp (rest list)) t)  ; end of the list: success
        ((> (first list) (second list)) nil)  ; first two not sorted: fail
        (t (sortedp (rest list)))))  ; go to next two

您可以使用every更简洁地执行此操作:

(defun sortedp (list)
  (every #'<= list (rest list)))