List 如何递归检查列表是否在Lisp中排序?

List 如何递归检查列表是否在Lisp中排序?,list,recursion,lisp,common-lisp,List,Recursion,Lisp,Common Lisp,我想编写一个递归函数来检查列表,如果列表按升序排列,则返回true,否则返回NIL。如果列表为空,则仍然为真。我对Lisp完全陌生,所以它仍然很混乱 (defun sorted (x) (if (null x) T (if (<= car x (car (cdr x))) (sorted (cdr x)) nil))) (取消排序(x) (如果(空x) T (如果您的解决方案的第一个问题是基本情况,则您不需要在列表末尾停

我想编写一个递归函数来检查列表,如果列表按升序排列,则返回true,否则返回NIL。如果列表为空,则仍然为真。我对Lisp完全陌生,所以它仍然很混乱

(defun sorted (x)
  (if (null x)
      T
      (if (<= car x (car (cdr x)))
          (sorted (cdr x))
          nil)))
(取消排序(x)
(如果(空x)
T

(如果您的解决方案的第一个问题是基本情况,则您不需要在列表末尾停止,而是在查看最后的to元素时停止,因为您需要to元素来进行比较。此外,调用
(car x)

(取消排序(列表)
(如果(endp(cddr列表))
(递归版本:

(取消排序(列表)
(或(endp列表)
(endp(cdr列表))
(和((T无T无T)
这个也适用于其他类型的序列:


(defun sortedp(sequence&key(test#)”如果你正在做作业(似乎是这样),那么上面的答案就可以了。如果你只是在学习Lisp,并且没有递归性的限制,那么下面的内容可能会让你对Lisp的威力略知一二:

(defun sorted (l) 
  (or (null l) (apply #'< l)))
(已排序的定义(l)
(或(空l)(应用#'
您就快到了,但您需要修复语法[例如(似乎这在长度为1的列表中失败。@Aryaatighchian您使用的是哪种环境?您是否有任何错误消息?nvm我找到了!您是否可以在其他功能方面帮助我?
(defun sorted (l) 
  (or (null l) (apply #'< l)))