Recursion 我在这个代码中做错了什么?我试图检查列表中的所有元素是否相同,无论测试用例如何,我都会得到a#f

Recursion 我在这个代码中做错了什么?我试图检查列表中的所有元素是否相同,无论测试用例如何,我都会得到a#f,recursion,scheme,Recursion,Scheme,创建函数AllEqual?(L),该函数将给出(至少2)个元素的列表,如果所有元素都相同,则返回#t,否则返回#f (定义(allequal?l) (如果(

创建函数AllEqual?(L),该函数将给出(至少2)个元素的列表,如果所有元素都相同,则返回#t,否则返回#f

(定义(allequal?l)
(如果(<(长度l)2)
#t
(相等的)(l车)(allequal)(cdr l(()()))
测试
(车辆l)
是否与
(allequal?…)
相等。由于
allequal?
返回一个布尔值(
#t
#f
),您可以测试
(汽车l)
是否为
#t
#f
,这不是您想要的

您需要比较前两个元素(如果可用),然后在列表的
cdr
上递归:

(define (allequal? l)
  (if (< (length l) 2)
      #t 
      (and (equal? (car l) (cadr l))
           (allequal? (cdr l)))))

啊,现在我明白我做错了什么,非常感谢!Hi @威廉如果这个或任何答案已经解决了你的问题,请考虑点击复选标记。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。
(equal? (car l) (allequal? (cdr l)))
(define (allequal? l)
  (if (< (length l) 2)
      #t 
      (and (equal? (car l) (cadr l))
           (allequal? (cdr l)))))
(define (allequal? l)
  (or (< (length l) 2)
      (and (equal? (car l) (cadr l))
           (allequal? (cdr l)))))
(define (allequal? l)
  (or (null? l)
      (null? (cdr l))
      (and (equal? (car l) (cadr l))
           (allequal? (cdr l)))))