如何确定列表是否按常见的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)))
答案 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)))