缩减列表(dr racket)

缩减列表(dr racket),racket,Racket,我是Dr Racket的初学者,现在我正在寻找减少嵌套列表的解决方案 例如: +0(列表12(列表3(列表4 5)6)7(列表8))空9)) 应该生产45个 我当前的函数只适用于普通列表,但只要列表中有一个列表,它就不再工作了 (define (reduce fun neutral lst) (cond ((empty? lst) neutral) (else (fun (car lst) (reduce fun neutral (

我是Dr Racket的初学者,现在我正在寻找减少嵌套列表的解决方案

例如:
+0(列表12(列表3(列表4 5)6)7(列表8))空9))
应该生产45个

我当前的函数只适用于普通列表,但只要列表中有一个列表,它就不再工作了

(define (reduce fun neutral lst)
  (cond
    ((empty? lst) neutral)
     (else
          (fun (car lst)
           (reduce fun neutral (rest lst))))))

您必须考虑<代码>(CARLST)< /C> >也是一个列表。在这种情况下,在应用

fun
之前,您还需要减少
(汽车lst)

(define (reduce fun neutral lst)
  (cond
    [(empty? lst)
     neutral]
    [(list? (car lst))
     (fun (reduce fun neutral (car lst))
          (reduce fun neutral (rest lst)))]
    [else
     (fun (car lst)
          (reduce fun neutral (rest lst)))]))