2016-03-17 42 views
2

如何確定列表是否按照通用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))) 
+2

你應該在這裏發佈,而不是鏈接你的代碼。 – jkiiski

+0

我一直有格式正確的問題。 – ObiJuanKanobe

+0

您需要在每行前面有四個空格才能將其格式化爲代碼。還有一個按鈕(帶花括號的那個) – jkiiski

回答

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))) 
相關問題