[英]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))
)
if
在cond
不使用。 第一行应为:
(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.