List 检查列表是否按方案排序
我正在检查列表是否已排序。如果已排序,则返回True,否则返回False。然而,这段代码总是返回True,我不知道如何修复它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,则不使用。第一行应该是:
(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。所以我改成订购?但我有另一个错误,说“车:错误类型的论点”。哦,是的,你也必须担心单身列表。。。我更新了所有的。