繁体   English   中英

检查列表是否按Scheme排序

[英]Check if a list is sorted on Scheme

我正在尝试检查列表是否已排序。 如果已排序,则返回True,否则返回False。 但是,此代码始终返回True,但不确定如何解决。

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

ifcond不使用。 第一行应为:

(cond ((null? lst) #t)

你的代码是在试探是否if是真实的。 由于这始终是正确的,因此对该子句进行了处理并返回#t

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

首先, if cond子句中没有必要,请删除它。 接下来,您将进行一些非计划函数调用:

      ((> (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))
     )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM