List 检查列表是否按方案排序

List 检查列表是否按方案排序,list,debugging,sorting,scheme,List,Debugging,Sorting,Scheme,我正在检查列表是否已排序。如果已排序,则返回True,否则返回False。然而,这段代码总是返回True,我不知道如何修复它 (define (ordered? lst) (cond (if (null? lst) #t) ((> (car(cdr(lst))) car(lst)) (apply increasing? cdr(lst))) (else #f)) ) 如果在cond中使用if,则不使用。第一行应该是:

我正在检查列表是否已排序。如果已排序,则返回True,否则返回False。然而,这段代码总是返回True,我不知道如何修复它

(define (ordered? lst)
    (cond (if (null? lst) #t)
          ((> (car(cdr(lst))) car(lst))
           (apply increasing? cdr(lst)))
          (else #f))
)

如果在
cond
中使用
if
,则不使用
。第一行应该是:

(cond ((null? lst) #t)

您的代码正在测试
是否为真。因为这总是正确的,所以该子句被处理并返回
#t

让我们考虑一下您的代码在做什么

首先,如果在
cond
子句中不需要
if,就去掉
。接下来将进行一些非scheme函数调用:

      ((> (car(cdr(lst))) car(lst))
应该是:

  ((> (car (cdr lst)) (car lst))
现在,您通常不会以这种方式使用
apply
。相反,我将使用递归

因此:

       (apply increasing? cdr(lst)))
变成:

    (ordered (cdr lst)))
想想这是怎么做的,我正在检查列表的其余部分是否有序,如果在某些地方没有,这个表达式将计算为false,表达式的其余部分也将计算为false

接下来,我们要检查该实例是否未排序,以便:

  (else #f))
很好

总而言之:

(define (ordered? lst)
      (cond ((null? lst) #t)
            ((eq? (length lst) 1) #t)
      ((> (car (cdr lst)) (car lst))
        (ordered? (cdr lst)))
      (else #f))
     )

这给了我ordered的未绑定变量的错误,因为我没有定义ordered。所以我改成订购?但我有另一个错误,说“车:错误类型的论点”。哦,是的,你也必须担心单身列表。。。我更新了所有的。