Recursion Racket:递归地比较列表中的元素

Recursion Racket:递归地比较列表中的元素,recursion,scheme,racket,Recursion,Scheme,Racket,这个函数应该获取一个列表(满是字符串或整数,这就是为什么它以“if”语句开头)并检查它是否按升序排列 我还没有弄清楚如何防止它崩溃,就像上次递归调用一样,“cadr”没有什么可利用的,因为“car”是最后一个元素 (define (my-sorted? lst) (if (number? (car lst)) (if (< (car lst) (cadr lst)) (my-sorted? (rest lst)) #f)

这个函数应该获取一个列表(满是字符串或整数,这就是为什么它以“if”语句开头)并检查它是否按升序排列

我还没有弄清楚如何防止它崩溃,就像上次递归调用一样,“cadr”没有什么可利用的,因为“car”是最后一个元素

(define (my-sorted? lst)  
   (if (number? (car lst))
     (if (< (car lst) (cadr lst))
        (my-sorted? (rest lst))      
         #f)     
     #f) 
 )
(定义(我的排序?lst)
(如果(编号)(车辆lst))
(如果(<(车辆lst)(cadr lst))
(我的分类?(剩余lst))
#(f)
#(f)
)
我知道排序函数存在,但是我需要递归地实现这个函数


感谢您的帮助。

您应该尝试的两个最基本的列表是:

(my-sorted? '())  ; ==> #t (empty list is always sorted)
(my-sorted? '(1)) ; ==> #t (one element list is always sorted)
您当前的代码只是在其参数上执行了
car
cadr
,因此这两个测试将在不同级别失败


问题是如何比较一个数字和一些非数字的东西<代码>谢谢你的帮助。实际上,列表只能是字符串或整数-如果我不清楚的话,很抱歉。我需要满足的另一个条件是,如果列表确实包含字符串和int,那么我需要输出一个错误。因此,我的想法是分解函数来处理int(使用if(number?)行),然后让else条件处理字符串大小写。我试图找出我现在是否能够在racket中获得字符串的ASCII值,以便对字符串大小写进行比较。cond是否能够处理所有情况?@BrianJay因为您有相同类型的元素,所以可以一次性确定比较函数。请参阅我的编辑。
(cond 
  ((not (number? (car lst))) #f)
  ((< (car lst) (cadr lst)) (my-sorted? (rest lst))
  (else #f))
(define (my-sorted lst)
  ;; determine what comparison function to use, bind it to greater?
  (define greater? 
    (if (and (pair? lst) (number? (car lst)))
        >
        string>?))

  ;; main recursive loop uses that one function
  ;; this can be done with define + call as well
  (let loop ((lst lst))
    (cond ((or (null? lst) (null? (cdr lst))) ...)
          ((greater? (car lst) (cadr lst)) ...)
          (else (loop ...)))))